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>