2009-08-31 68 views
3

我正在開發Dnn模塊,我在一些模塊中使用jQuery,我將jQuery引用添加到每個ascx文件的頂部,方式是當用戶將多個模塊添加到每次引用的頁面時當添加模塊時,這種情況會給出一些錯誤,當我從模塊的引用中移除,這是另一個模塊的底部,它們都使用jQuery,它們工作良好,有沒有辦法阻止多重引用jQuery?我的意思是,如果它在頁面引用befeore它不會再引用。謝謝。防止jQuery多重參考

回答

6

你可以做小的腳本,以檢查是否jQuery是出現在頁面上,且僅當不存在,加載它:

// 'load-jquery.js' 
window.onload = function() { 
    if (window.jQuery === undefined) { 
    var script = document.createElement('script'); 
    script.src = 'path/to/jquery.min.js'; 
    document.getElementsByTagName('head')[0].appendChild(script); // load jQuery 
    } 
}; 
2

如果你是在高衝突環境中加載了jQuery,試試命名空間jQuery。

SOMETHING = { 
    jQuery: jQuery, 
    $: $ 
} 

然後通過SOMETHING $或SOMETHING.jQuery調用jQuery。只要記得在你想要的jQuery版本加載後立即執行命名空間,否則你最終會得到錯誤的結果。如果你有權訪問jQuery文件,最簡單的方法是在文件末尾附加名稱空間代碼。

3

如果你使用DNN 5.x,你應該使用DNN核心的jQuery版本,通過調用DotNetNuke.Framework.jQuery.RequestRegistration()

如果您只處理自己模塊中的衝突,則可以在代碼中添加腳本,然後檢查它是否已被添加。我們手動將jQuery添加到頭文件中(創建一個通用的HTML控件,並將其添加到Page.Header.Controls),然後致電Page.ClientScript.RegisterClientScriptBlock()創建一個腳本塊以調用jQuery.noConflict(以便它不會干擾DNN的JavaScript內容)。然後,您可以將整個調用包裝爲在調用Page.ClientScript.IsClientScriptBlockRegistered()時添加jQuery,以便只添加一次。