自訂控件、UserControl、頁面、後端代碼均可能引用 JS,極易造成重複引用、順序錯誤、版本衝突。本文提供一個輕量級管理方案。
public class Script : Control
{
public string Src { get; set; }
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (string.IsNullOrEmpty(Src)) return;
string resolved = ResolveUrl(Src);
var list = HttpContext.Current.Items["IncludedJavaScript"] as List<string>;
if (list == null)
{
list = new List<string>();
HttpContext.Current.Items["IncludedJavaScript"] = list;
}
if (!list.Contains(resolved))
list.Add(resolved);
}
}
在 MasterPage 或基底頁面 `PreRender` 階段輸出:
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
var list = HttpContext.Current.Items["IncludedJavaScript"] as List<string>;
if (list != null)
{
foreach (string src in list)
Page.ClientScript.RegisterClientScriptInclude(src, src);
}
}
<!-- UserControl -->
<uc:Script Src="~/Scripts/jquery-1.12.4.min.js" runat="server" />
<uc:Script Src="~/Scripts/my-plugin.js" runat="server" />
<!-- Content Page -->
<uc:Script Src="~/Scripts/page-specific.js" runat="server" />
此方案適合舊版 WebForms 專案快速治理 JS 混亂,零外部依賴、幾十行代碼即可落地。