我有一个ASP.NET用户控件(.ascx文件)。在这个用户控件中,我想使用一个.js文件。
因此,我在页面上包含了<script src="file.js" type"text/javascript"></script>。
但是,有时我会在已经加载了相同脚本的网页中使用此用户控件。
如果页面还没有包含相同脚本的另一个<script />标记,我如何才能添加一个在页面上呈现的<script />声明?
发布于 2009-05-26 00:31:02
因为您正在使用asp.net,所以在服务器端进行检查是有意义的,因为您将选择在服务器端添加对javascript文件的引用。从您的.ascx文件中,您可以使用以下内容进行注册:
this.Page.ClientScript.RegisterClientScriptInclude("GlobalUnqiueKey", UrlOfJavascriptFile);..。在您的页面中,您只需直接调用ClientScript对象:
ClientScript.RegisterClientScriptInclude("GlobalUnqiueKey", UrlOfJavascriptFile);'GlobalUniqueKey‘可以是任何字符串(我也使用了javascript文件的url )
如果您尝试使用相同的密钥字符串注册脚本,它不会执行任何操作。因此,如果你在你的页面,你的控件或者其他任何地方调用它,你最终只会在你的页面中有一个引用。这样做的好处是,您可以在一个页面上拥有一个控件的多个实例,即使它们都试图注册相同的脚本,但它最多只能注册一次。而且他们都不需要担心脚本已经被注册了。
有一个'IsClientScriptIncludeRegistered(stringkey)‘方法,你可以用它来查看脚本是否已经包含在该键下,但是在注册之前进行检查似乎是非常多余的,因为多次尝试注册不会抛出异常或导致任何其他错误。
执行客户端检查意味着,假设浏览器缓存了多个javascript引用(它们可能没有),您仍然有多个标记,并且每个标记的开销会导致一些javascript运行。如果一个页面上有20个控件实例,可能会出现严重的问题。
发布于 2009-05-26 00:10:48
你可以在客户端做两件事中的一件。
下面是一个快速的JS函数,它使用JQuery来执行您需要的操作:
function requireOnce(url) {
if (!$("script[src='" + url + "']").length) {
$('head').append("<script type='text/javascript' src='" + url + "'></script>");
}
}发布于 2009-05-26 00:10:03
使用类似以下内容:
if(typeof myObjectOrFunctionDecalredInThisScript != 'undefined') {
// code goes here
var myObjectOrFunctionDecalredInThisScript = { };
}这将测试您的对象或函数是否已经存在,从而防止重新声明。
https://stackoverflow.com/questions/908425
复制相似问题