如何检查客户端脚本资源是否在Page中注册?

时间:2012-04-26 15:12:14

标签: jquery asp.net custom-controls embedded-resource webresource.axd

我开发了一个自定义控件(不是用户控件),它使用了一些jQuery脚本。

我已将控件的脚本作为嵌入式资源嵌入到程序集中,并将其在OnPreRender事件的Page中注册,如下所示:

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>

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用短路操作符插入脚本标记以测试jQuery对象。 如果jQuery不可用,请将其提供。

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