zoukankan      html  css  js  c++  java
  • 如何动态生成 JavaScript 文件

    在 ASP.NET 里面,服务器端动态生成 JavaScript 的方式是灵活多样的,包括生产页面内脚本块和外部文件,本文讨论了4种可行的方案。

    文章目录
    一、向客户端注册脚本
    二、Application_Start 事件里面生成 JavaScript 文件
    三、用 Web Form 来实现
    四、利用一般处理程序 ashx 文件
    生成的客户端代码
    调用方式
    代码下载


    一、向客户端注册脚本

    先用Page.ClentScript.IsClientScriptBlockRegistered()判断脚本是否已经注册,若未注册,则调用 Page.ClientScript.RegisterClicentScriptBlock,具体可以看这篇文章在 ASP.NET 2.0 中高效率地使用 JavaScript - Part 1。至于 ASP.NET AJAX,ScriptManager 类有另外一套注册客户端脚本的方法。


    二、在Web应用程序启动的时候用流往服务器写入JavaScript 脚本文件,即在Application_Start 事件里面生成 JavaScript 文件,然后在页面里调用。

    那就在程序启动的时候
    string path = Server.MapPath("../js/xyz.js  ");

    // Delete the file if it exists.
    if (File.Exists(path))
    {
    File.Delete(path);
    }

    // Create the file.
    StreamWriter sr = File.CreateText(path);
    sr.WriteLine (
    "function  f1()");
    sr.WriteLine (
    "{");
    // 这里是f1的内容
    // ……
    sr.WriteLine ("}");
    sr.Close();

    三、用 Web Form 来实现

    在 Page_Load 事件里面输出 JavaScript 脚本流,然后用 Response.End() 方法将当前所有缓冲的输出发送到客户端,停止该页的执行,因为标签是在Page Render 事件呈现的,Page Load 事件先于 Page Render 执行,执行到Response.End() ,结束该页的输出,Page Reader 的内容就不再输出了,则后面的<html><head><body> 之类的标签就不会输出。


    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgs) Handles Me.Load
            Response.ContentType 
    = "text/javascript"
            Response.Write(
    "var External = {};" & vbCrLf)
            Response.Write(
    "External.hello='Hello, This is external JavaScript output in Page_Load event and end by Response.End() method  !';")
            Response.End()
    End Sub

    四、利用一般处理程序 ashx 文件

    在解决方案资源管理器里面“添加新项”,选择“一般处理程序”,点添加后生成一个 ashx 后缀名的文件。该文件类继承 IHttpHandler 接口,定义 ASP.NET 为使用自定义 HTTP 处理程序同步处理 HTTP Web 请求而实现的协定。它只公开了两个成员

  • IsReusable: 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。如果 IHttpHandler 实例可再次使用,则为 true;否则为 false。将 IsReusable 属性用所提供的重写 IsReusable 属性访问器 (getter) 的代码显式设置为 true 或 false。
  • ProcessRequest: 这个输出数据流的关键方法,它通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。 用context.Response.Write() 向客户端输出数据。
  • <%@ WebHandler Language="VB" Class="OutsiteJS" %>

    Imports System
    Imports System.Web

    Public Class OutsiteJS : Implements IHttpHandler
        
        
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
            context.Response.ContentType 
    = "text/plain"
            context.Response.Write(
    "var Outsite = {};")
            context.Response.Write(
    "Outsite.greeting = 'Hello! This is outsite javascript created by ashx file(一般处理程序)';")
        
    End Sub
     
        
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            
    Get
                
    Return False
            
    End Get
        
    End Property

    End Class

    生成的客户端代码

    var External= {};
    External.hello
    ='Hello, This is external JavaScript output in Page_Load event and end by Response.End() method  !'

    调用方式

    调用方式其实跟通常的调用外部 Javascript 差不多,只是<script> 标签加上 type="text/javascript" 属性,以免识别不了文件类型, src 属性设置为动态文件的文件名,如"makeJS.aspx" 而不是通常的“filename.js”。

    <script type="text/javascript" src="makeJS.aspx"></script>
    <script type="text/javascript" src="OutsiteJS.ashx"></script>

    <script type="text/javascript">
        alert(External.hello)
        alert(Outsite.greeting)    

    </script>

    代码下载

查看全文
  • 相关阅读:
    C++中堆和栈的区别
    JavaScript 点击切换菜单
    正则表达式过滤掉CSS样式
    单例模式DEMO
    将来的你,一定会感谢现在努力的自己
    1066 图像过滤 (15 分)
    1076 Wifi密码 (15 分)
    1071 小赌怡情 (15 分)
    1046 划拳 (15 分)
    1086 就不告诉你 (15 分)
  • 原文地址:https://www.cnblogs.com/feixian49/p/1442517.html
  • Copyright © 2011-2022 走看看