2009-08-31 69 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,以便只添加一次。