如何動態產生 JavaScript 檔案

來源:互聯網
上載者:User

在 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 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 檔案

在方案總管裡面“添加新項”,選擇“一般處理常式”,點添加後產生一個 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>

     

    代碼下載

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.