首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASHX 輸出 JavaScript 在 Chrome 內核瀏覽器不執行的根因與修復

     編輯:ASP.NET 基礎

現象重現

通用腳本輸出類 Script.Alert() 在 IE/360 兼容模式正常彈窗,但在 Chrome/360 極速模式下僅輸出腳本文本,不執行。

問題代碼

public static void ResponseScript(string script)
{
    HttpContext.Current.Response.Write("<script type=\"text/javascript\">\n//<![CDATA[\n");
    HttpContext.Current.Response.Write(script);
    HttpContext.Current.Response.Write("\n//]]>\n</script>\n");
}

// ashx 中調用
context.Response.ContentType = "text/plain"; // 錯誤點
Script.AlertAndGoBack("溫馨提示:有重復的用戶!");

根因分析

  • ASHX 默認或手動設置 ContentType = "text/plain"。
  • Chrome 內核嚴格遵循 MIME 類型:text/plain 視為純文本,**不會解析執行內嵌的 <script> 標籤**。
  • IE/舊版瀏覽器較寬容,嘗試嗅探內容並執行腳本。

一鍵修復

// 修改 ashx ProcessRequest 開頭
context.Response.ContentType = "text/html; charset=utf-8";
// 或至少
context.Response.ContentType = "text/html";

最佳實踐建議

  1. 統一輸出封裝:將腳本輸出邏輯封裝在基類或擴展方法中,強制設置正確 ContentType。
  2. 避免 ASHX 輸出 HTML/JS:優先考慮 WebAPI 返回 JSON,前端 AJAX 回調處理提示/跳轉,職責分離更清晰。
  3. 若必須用 ASHX 輸出腳本:
    • 設置 ContentType = "text/html"
    • 確保輸出完整 HTML 文檔結構或至少有效片段
    • 編碼統一 UTF-8,避免中文亂碼

擴展:正確的 ASHX 輸出 JSON 示例

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "application/json; charset=utf-8";
    var result = new { success = true, msg = "操作成功" };
    context.Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(result));
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved