如何判断JavaScript文件是否已包含在ASP.NET页面中?

Shi*_*mmy 13 html javascript asp.net script-tag

我有一个ASP.NET用户控件(.ascx文件).在这个用户控件中我想使用.js文件.

所以我<script src="file.js" type"text/javascript"></script>在页面上加入.

但是,有时我会在已加载此相同脚本的网页中使用此用户控件.

<script />如果页面尚未包含<script />同一脚本的另一个标记,我该如何添加将在页面上呈现的声明?

Nei*_*den 12

当您使用asp.net时,检查服务器端是有意义的,因为这将是您选择添加对javascript文件的引用的位置.从.ascx文件中,您可以注册以下内容:

this.Page.ClientScript.RegisterClientScriptInclude("GlobalUnqiueKey", UrlOfJavascriptFile);
Run Code Online (Sandbox Code Playgroud)

...从您的页面直接调用ClientScript对象:

ClientScript.RegisterClientScriptInclude("GlobalUnqiueKey", UrlOfJavascriptFile);
Run Code Online (Sandbox Code Playgroud)

'GlobalUniqueKey'可以是任何字符串(我也使用javascript文件的url)

如果您尝试使用相同的键字符串注册脚本,则它不会执行任何操作.因此,如果您在自己的页面,控件或其他任何地方调用此选项,则最终只会在页面中显示一个引用.这样做的好处是,您可以在页面上拥有多个控件实例,即使它们都尝试注册相同的脚本,也只能执行最多一次.并且他们都不需要担心脚本已经注册.

有一个'IsClientScriptIncludeRegistered(stringkey)'方法,您可以使用该方法查看该密钥是否已包含在该密钥下,但在注册多次尝试注册之前执行该检查似乎非常多余,不会抛出异常或导致任何其他错误.

执行检查客户端意味着,假设浏览器缓存了多个javascript引用(它们可能不是),您仍然有多个标记,每个标记的顶部都会导致一些javascript运行.如果您在页面上有20个控件实例,则可能会出现严重问题.

  • 基于你的答案,我建立在我的基页布尔属性"AttachJqery","AttachEngine"等等,这控制了attatchement所以我不必弄脏代码.我也可以选择设置默认值.如果有任何需要的例子很乐意发帖,请在这里发表评论. (2认同)

mys*_*mic 6

你可以做客户端的两件事之一......

  1. 检查dom以查找与您要检查的javascript文件对应的脚本标记
  2. 测试你知道已经/将要在javascript文件中定义的变量或函数是否为undefined.

这是一个快速的JS函数,它使用JQuery来完成你需要的东西:

function requireOnce(url) {    
    if (!$("script[src='" + url + "']").length) {
        $('head').append("<script type='text/javascript' src='" + url + "'></script>"); 
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个问题是,如果jQuery本身是我要检查的脚本:) (3认同)