3

我开发了一个自定义控件(不是用户控件),它使用了一些jQuery脚本。如何检查客户端脚本资源是否在页面中注册?

我已经嵌入在控制的脚本作为嵌入式资源进入议会,并将它在网页OnPreRender事件注册的,就像这样:

protected override void OnPreRender(EventArgs e) 
{ 
    string controlScript = "Namespace.MyScript.js"; 
    ClientScriptManager csm = this.Page.ClientScript; 
    csm.RegisterClientScriptResource(typeof(ResourceFinder), controlScript); 
    base.OnPreRender(e); 
} 

这个控制工程与jQuery的项目部署时库已经到位,但如果jQuery库不可用,该怎么办?我将如何检查库是否已经在项目中,如果没有,则将其嵌入到组件中,并从那里将其拉出。我的想法是这样的:

protected override void OnPreRender(EventArgs e) 
{ 
    ClientScriptManager csm = this.Page.ClientScript; 

    // Here I would need to check if jQuery is already registered 
    // but there is no such method like: IsClientScriptResourceRegistered 
    if (csm.IsClientScriptResourceRegistered("jQuery")) 
    { 
     string jQueryLib = "Namespace.jquery-1.7.2.min.js"; 
     csm.RegisterClientScriptResource(typeof(ResourceFinder), jQueryLib); 
    } 

    string controlScript = "Namespace.MyScript.js"; 
    csm.RegisterClientScriptResource(typeof(ResourceFinder), controlScript); 
    base.OnPreRender(e); 
} 

我知道我可以反正嵌入在装配jQuery库,但如果jQuery的已经在项目,然后我将最终得到一个页面两次调用libray,这样:

<!-- Project's jQuery lib --> 
<script type="text/javascript" src="/scripts/jquery-1.7.2.min.js"></script> 
<!-- DLL's duplicated jQuery lib: --> 
<script type="text/javascript" src="/WebResource.axd?d=AP7y...r0bHQl"></script> 
<!-- DLL Control's MyScript.js --> 
<script type="text/javascript" src="/WebResource.axd?d=uTGR...ur15b"></script> 

......这正是我想要避免的。

任何想法?

+0

我想,也许代替注册jQuery库直接我能寄存器第一jQuery的可用性检查如[此的其他问题]表示的脚本块(http://stackoverflow.com/questions/1014203 /最好的方式使用的 - 谷歌托管的,jQuery的,但落回至我的托管库上-GO)。 – 2012-04-26 15:24:42

回答

1

插入脚本标记以使用短路运算符测试jQuery对象。 如果jQuery不可用,请使其可用。

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>