博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何动态生成 JavaScript 文件
阅读量:4315 次
发布时间:2019-06-06

本文共 2716 字,大约阅读时间需要 9 分钟。

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

 

文章目录

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

那就在程序启动的时候
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();

 

在 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
 
Object
ByVal
 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 后缀名的文件。该文件类继承 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
>

 

转载于:https://www.cnblogs.com/feixian49/archive/2009/04/23/1442517.html

你可能感兴趣的文章
Laravel框架学习笔记之任务调度(定时任务)
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
VNPY- VnTrader基本使用
查看>>
【NOI 2018】归程(Kruskal重构树)
查看>>
注册用户
查看>>
HDU 4571 SPFA+DP
查看>>
centos 创建以日期为名的文件夹
查看>>