我正在尝试利用雅虎的卓越性能规则:avoiding duplicate script
为此,我希望在将脚本注入页面之前,能够知道该脚本是否已经添加到页面中。看起来我不知道在asp.net代码中添加了什么,除非我在页面中添加了一个脚本管理器。但是我想避免使用asp.net AJAX。从规则的描述来看,这看起来在php中是可能的。
假设我不能在后台的代码中进行检查,我正在考虑使用jQuery $.getString函数,但它在获取脚本之前不进行检查。如果我选择javascript文件,我是否必须解析整个http响应才能确定页面上加载的是哪个脚本?
发布于 2009-07-21 06:21:31
如果页面使用ASP.NET Page.ClientScript注册API注册脚本,则可以使用Page.ClientScript.IsClientScriptIncludeRegistered.另一方面,如果您正在使用这些API,您实际上不需要调用它,因为它已经确保每个API中只有一个被注册。
http://msdn.microsoft.com/en/us/library/system.web.ui.clientscriptmanager.isclientscriptincluderegistered.aspx
如果页面只在标记中静态地包含常规的ole脚本元素,并且您需要检测客户端是否加载了脚本,则必须获取页面上的所有脚本元素并查看它们的.src值。这样做的问题是,一些浏览器会自动将该url解析为完整路径,而不仅仅是您声明的路径。因此,您可以用各种方式来说明这一点--您可以只搜索字符串的末尾作为您想要的脚本,或者您也可以通过将您想要比较的url设置到一个动态创建的script元素(您永远不会将其添加到DOM中,但仍然会为您解析)来解析它。
这就是我的想法,如果我弄错了,很抱歉:
var s = document.createElement("script");
s.src = "foo.js";
var loaded, scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
if (scripts[i].src === s.src) {
loaded = true;
break;
}
}
if (loaded) {
// this script is already loaded
// assuming you dont have multiple copies in different locations
}发布于 2009-07-21 06:32:04
您不需要使用任何客户端脚本来完成此操作...你可以在你的代码中使用ClientScriptManager来做到这一点,而不需要在你的控件/页面中使用ASP.NET AJAX (我认为你把ClientScriptManager和ScriptManager*搞混了),只需使用:
ClientScript.RegisterClientScriptInclude("some-script", "myScript.js");或从用户控件执行以下操作:
Page.ClientScript.RegisterClientScriptInclude("some-script", "myScript.js");这将使用键"some- script“&只在页面上注册脚本的一个副本。
*需要明确的是,我认为混淆来自于这两者之间的差异:
如果是用于管理客户端脚本的服务器端助手类,则为
中用于辅助客户端Ajax脚本编写的控件
(见鬼,我甚至把自己搞糊涂了&一开始给出了错误的示例代码)
发布于 2009-09-17 13:07:56
好吧,这在有多个web用户控件的主细节场景中实际上是行不通的。
如果web用户控件是动态的,那么您将无法控制谁必须执行脚本初始化。
链接一次比较容易,但开发人员必须在ClientManager和使用脚本加载之间权衡他的选择。
https://stackoverflow.com/questions/1157463
复制相似问题