如何在 WebForms 中查找流氓脚本调用的来源
How to find the source of a rogue script call in WebForms
我正在 WebForms 项目中寻找一个奇怪的错误,我在其中找不到第二个 jQuery 引用的来源。
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-1.10.2.min.js",
//additional entries omitted
));
现在我的母版页文件中调用了这个包:
<asp:PlaceHolder runat="server">
<%: Scripts.Render("~/bundles/jquery") %>
<%: Styles.Render("...") %>
</asp:PlaceHolder>
只要用户停留在网页的根文件夹 (www.domain.com/page
) 中,evertyhing 就可以正常工作。不幸的是,当用户被重定向到位于子文件夹 (www.domain.com/subfolder/someotherpage
) 中的 aspx 页面时,出现以下错误:
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:53078/Scripts/jquery-1.10.2.js
我搜索了整个解决方案,但找不到这部分的来源。
查看呈现的源代码我看到了这个:
<body>
<script src="../Scripts/jquery-1.10.2.js" type="text/javascript"></script>
</body>
现在这看起来不像是位于头部的捆绑渲染的脚本标签。鉴于脚本标签的位置,这应该源自母版页文件,但我不能指手画脚:
<head runat="server">
<asp:PlaceHolder runat="server">
<%: Scripts.Render("~/bundles/jquery") %>
<%: Styles.Render("~/bundles/Stylesheets") %>
</asp:PlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<telerik:RadScriptManager runat="server" EnableEmbeddedjQuery="false">
<Scripts>
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryExternal.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryPlugins.js" />
</Scripts>
</telerik:RadScriptManager>
<%: Scripts.Render("~/bundles/UiEffects") %>
</body>
在您提出建议之前:我已经尝试用原版 asp:ScriptManager
替换 RadScriptManager,但无济于事。
是否可以确定脚本引用源自 asp.net Web 项目中的哪一行代码,以便我可以消除它?
因为没有明显的纯文本引用 jQuery-1.10。2.js,它必须是 Telerik 中的错误或引用的程序集。
我没有检查安装的 Nuget 包。安装了一个,它会自动向 ScriptManager 注册 jQuery:
http://www.nuget.org/packages/AspNet.ScriptManager.jQuery/1.10.2
如果你安装了这个,你不能再引用 jQuery,否则你可能 运行 变成 $(...).functionName()
不是函数错误。
因此,这个问题有 2 种可能的解决方案:
- Re-install 这个包/更新这个包并删除母版页文件中对 jQuery 或
的所有其他引用
- 使用
uninstall-package AspNet.ScriptManager.jQuery -project xxx
删除此 NuGet 包
我正在 WebForms 项目中寻找一个奇怪的错误,我在其中找不到第二个 jQuery 引用的来源。
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-1.10.2.min.js",
//additional entries omitted
));
现在我的母版页文件中调用了这个包:
<asp:PlaceHolder runat="server">
<%: Scripts.Render("~/bundles/jquery") %>
<%: Styles.Render("...") %>
</asp:PlaceHolder>
只要用户停留在网页的根文件夹 (www.domain.com/page
) 中,evertyhing 就可以正常工作。不幸的是,当用户被重定向到位于子文件夹 (www.domain.com/subfolder/someotherpage
) 中的 aspx 页面时,出现以下错误:
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:53078/Scripts/jquery-1.10.2.js
我搜索了整个解决方案,但找不到这部分的来源。
查看呈现的源代码我看到了这个:
<body>
<script src="../Scripts/jquery-1.10.2.js" type="text/javascript"></script>
</body>
现在这看起来不像是位于头部的捆绑渲染的脚本标签。鉴于脚本标签的位置,这应该源自母版页文件,但我不能指手画脚:
<head runat="server">
<asp:PlaceHolder runat="server">
<%: Scripts.Render("~/bundles/jquery") %>
<%: Styles.Render("~/bundles/Stylesheets") %>
</asp:PlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<telerik:RadScriptManager runat="server" EnableEmbeddedjQuery="false">
<Scripts>
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.Core.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryExternal.js" />
<asp:ScriptReference Assembly="Telerik.Web.UI" Name="Telerik.Web.UI.Common.jQueryPlugins.js" />
</Scripts>
</telerik:RadScriptManager>
<%: Scripts.Render("~/bundles/UiEffects") %>
</body>
在您提出建议之前:我已经尝试用原版 asp:ScriptManager
替换 RadScriptManager,但无济于事。
是否可以确定脚本引用源自 asp.net Web 项目中的哪一行代码,以便我可以消除它?
因为没有明显的纯文本引用 jQuery-1.10。2.js,它必须是 Telerik 中的错误或引用的程序集。
我没有检查安装的 Nuget 包。安装了一个,它会自动向 ScriptManager 注册 jQuery:
http://www.nuget.org/packages/AspNet.ScriptManager.jQuery/1.10.2
如果你安装了这个,你不能再引用 jQuery,否则你可能 运行 变成 $(...).functionName()
不是函数错误。
因此,这个问题有 2 种可能的解决方案:
- Re-install 这个包/更新这个包并删除母版页文件中对 jQuery 或 的所有其他引用
- 使用
uninstall-package AspNet.ScriptManager.jQuery -project xxx
删除此 NuGet 包