如果其他脚本'装载顺序未知

Can I limit scope of jQuery version I need using noConflict() if other scripts' loading order is unknown?

本文关键字:顺序 未知 其他 脚本 如果      更新时间:2023-10-16

我想在我不控制的页面(电子商务平台)中异步包含一个特定版本的jQuery,并且只在我的脚本中使用它。页面可能会加载其他脚本,这些脚本可能也想做同样的事情,我不知道页面包含我的脚本与其他脚本的顺序。

使用jQuery.noConflict([removeAll]),我可以确保:

  1. 我的脚本得到了jQuery的正确版本
  2. 我不会为其他人覆盖jQuery版本

我认为这个问题与大多数其他多jQuery版本的问题不同,因为人们对脚本包含顺序进行了假设,并且不使用带有回调的异步jQuery加载。

谢谢!

这是我的尝试(有人能确认这是可以的吗?):

myscript.js

(function() {
  var myJQuery;
  function loadjQuery(url, callback) {
    var runCallbackOnSuccess = function() {
      if (typeof jQuery != "undefined") {
        myJQuery = jQuery.noConflict(true);   // NOTICE THIS LINE
        callback();
      }
    };
    var scriptTag = document.createElement("script");
    scriptTag.setAttribute("src", url);
    scriptTag.onload = runCallbackOnSuccess; 
    document.getElementsByTagName("head")[0].appendChild(scriptTag);
  }
  function doSomethingInMyScript() {
    myJQuery(document).ready(....);
  }
  loadjQuery("https://code.jquery.com/jquery-A.B.C.min.js", doSomethingInMyScript);
})();

otherscript.js(超出我的控制范围,但假设是这样)

(function() {
  function loadjQuery(url, callback) {
    <same as above, but without the noConflict() call>
  }
  function doSomethingInOtherScript() {
    jQuery(document).ready(....);
  }
  loadjQuery("https://code.jquery.com/jquery-X.Y.Z.min.js", doSomethingInOtherScript);
})();

不管如何,这个代码都能工作吗

  1. 页面是否首先包含myscript.js或otherscript.js
  2. 是先执行myscript.js还是otherscript.js的回调函数

我怀疑,只要回调函数在每个jQuery加载后立即执行,并且不可能在加载的jQuery和执行的回调之间交错其他脚本中的代码,就可以了。