防止jQuery多重引用

我正在开发Dnn模块,我在一些模块中使用jQuery,我将jQuery引用添加到每个ascx文件的顶部,顺便说一下当用户每次添加模块时将多个模块添加到它引用的页面时,这种情况给出了一些错误,当我从模块中删除引用时,这是另一个模块的底部,它们都使用jQuery,它们工作正常,有没有办法防止多个引用jQuery? 我的意思是如果它在页面上被引用,那么它将不会再次引用。谢谢。

您可以制作一个小脚本来检查页面上是否存在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 } }; 

如果您使用的是DNN 5.x,则应通过调用DotNetNuke.Framework.jQuery.RequestRegistration()来使用DNN核心版本的jQuery。

如果您只处理自己模块中的冲突,可以在代码中添加脚本,然后检查它是否已添加。 我们手动将jQuery添加到头文件中(创建一个通用的HTML控件,并将其添加到Page.Header.Controls ),然后调用Page.ClientScript.RegisterClientScriptBlock()创建一个脚本块来调用jQuery.noConflict (这样它就不会’干扰DNN的JavaScript东西)。 然后,您可以将整个调用包装在对Page.ClientScript.IsClientScriptBlockRegistered()调用中添加jQuery,以便只添加一次。

如果您在高冲突环境中加载jQuery,请尝试使用命名空间jQuery。

 SOMETHING = { jQuery: jQuery, $: $ } 

然后通过SOMETHING。$或SOMETHING.jQuery调用jQuery。 只要记住在你想要的jQuery版本加载后立即执行命名空间,否则你最终会得到错误的版本。 如果您可以访问jQuery文件,最简单的方法是在文件末尾附加命名空间代码。