我开发了一个自定义控件(不是用户控件),它使用了一些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>
......这是我想避免的。
有什么想法吗?
答案 0 :(得分:1)
使用短路操作符插入脚本标记以测试jQuery对象。 如果jQuery不可用,请将其提供。
<script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script>