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 已经在项目中,那么我最终会得到一个页面,其中包含对库的两次调用,如下所示:

<!-- 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>

...这是我试图避免的。

有任何想法吗?

4

1 回答 1

1

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

<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>
于 2012-07-27T01:00:52.850 回答