首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从页面中删除重复的脚本

从页面中删除重复的脚本
EN

Stack Overflow用户
提问于 2009-07-21 05:41:54
回答 4查看 1.8K关注 0票数 0

我正在尝试利用雅虎的卓越性能规则:avoiding duplicate script

为此,我希望在将脚本注入页面之前,能够知道该脚本是否已经添加到页面中。看起来我不知道在asp.net代码中添加了什么,除非我在页面中添加了一个脚本管理器。但是我想避免使用asp.net AJAX。从规则的描述来看,这看起来在php中是可能的。

假设我不能在后台的代码中进行检查,我正在考虑使用jQuery $.getString函数,但它在获取脚本之前不进行检查。如果我选择javascript文件,我是否必须解析整个http响应才能确定页面上加载的是哪个脚本?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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中,但仍然会为您解析)来解析它。

这就是我的想法,如果我弄错了,很抱歉:

代码语言:javascript
复制
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
}
票数 2
EN

Stack Overflow用户

发布于 2009-07-21 06:32:04

您不需要使用任何客户端脚本来完成此操作...你可以在你的代码中使用ClientScriptManager来做到这一点,而不需要在你的控件/页面中使用ASP.NET AJAX (我认为你把ClientScriptManagerScriptManager*搞混了),只需使用:

代码语言:javascript
复制
ClientScript.RegisterClientScriptInclude("some-script", "myScript.js");

或从用户控件执行以下操作:

代码语言:javascript
复制
Page.ClientScript.RegisterClientScriptInclude("some-script", "myScript.js");

这将使用键"some- script“&只在页面上注册脚本的一个副本。

*需要明确的是,我认为混淆来自于这两者之间的差异:

如果是用于管理客户端脚本的服务器端助手类,则为

  • ClientScriptManager (换句话说,它的全部目的就是做您想要做的事情)。可通过页面的property.
  • ScriptManager进行访问property.
  • ScriptManager是ASP.NET AJAX

中用于辅助客户端Ajax脚本编写的控件

(见鬼,我甚至把自己搞糊涂了&一开始给出了错误的示例代码)

票数 1
EN

Stack Overflow用户

发布于 2009-09-17 13:07:56

好吧,这在有多个web用户控件的主细节场景中实际上是行不通的。

如果web用户控件是动态的,那么您将无法控制谁必须执行脚本初始化。

链接一次比较容易,但开发人员必须在ClientManager和使用脚本加载之间权衡他的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1157463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档