Prevent jQuery multiple reference

时光怂恿深爱的人放手 提交于 2019-12-01 00:02:37

You could make small script to check if jQuery is present on the page, and only if is not present, load it:

// '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
  }
};

If you're on DNN 5.x, you should be using the DNN core's version of jQuery, by calling DotNetNuke.Framework.jQuery.RequestRegistration().

If you're only dealing with conflict within your own modules, you can add the script in code and then check if it's already been added. We add jQuery manually into the header (create a generic HTML control, and add it to Page.Header.Controls), then call Page.ClientScript.RegisterClientScriptBlock() to create a script block to call jQuery.noConflict (so that it doesn't interfere with DNN's JavaScript stuff). You can then wrap the whole call to add jQuery in a call to Page.ClientScript.IsClientScriptBlockRegistered(), so that it only gets added once.

If you're loading jQuery in a high-conflict environment, try namespacing jQuery.

SOMETHING = {
    jQuery: jQuery,
    $: $
}

And then call jQuery via SOMETHING.$ or SOMETHING.jQuery. Just remember to do the namespacing as soon as the version of jQuery you want has loaded, or else you'll end up with the wrong one. If you have access to the jQuery file, the easiest way to do this is to append the namespacing code at the end of the file.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!