javascript - 如果其他脚本的加载顺序未知,我可以使用 noConflict() 限制我需要的 jQuery 版本的范围吗?

标签 javascript jquery ajax concurrency callback

我想在我无法控制的页面(电子商务平台)中异步包含特定版本的 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 加载和回调执行之间交错。

关于javascript - 如果其他脚本的加载顺序未知,我可以使用 noConflict() 限制我需要的 jQuery 版本的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331083/

相关文章:

javascript - 如何将参数传递给casperjs中的函数?

jquery - 在 Fullcalendar eventAfterAllRender 之后触发函数

javascript - 如何从异步调用返回响应?

ajax - f :ajax in ui:repeat renders h:outputText but fails to render/update h:inputText

javascript - 如何在 Angular Js 中将模块+ Controller 数据与 View 绑定(bind)

javascript - 引导日期选择器位置

Javascript - 将相同的属性应用于多个变量

javascript - 对象之间不重复代码的提示

javascript - $.post 在 ajaxstop 函数中连续循环

jquery - Django View 无法在 ajax 成功时返回 json?