如果其他脚本'装载顺序未知
Can I limit scope of jQuery version I need using noConflict() if other scripts' loading order is unknown?
我想在我不控制的页面(电子商务平台)中异步包含一个特定版本的jQuery,并且只在我的脚本中使用它。页面可能会加载其他脚本,这些脚本可能也想做同样的事情,我不知道页面包含我的脚本与其他脚本的顺序。
使用jQuery.noConflict([removeAll])
,我可以确保:
- 我的脚本得到了jQuery的正确版本
- 我不会为其他人覆盖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);
})();
不管如何,这个代码都能工作吗
- 页面是否首先包含myscript.js或otherscript.js
- 是先执行myscript.js还是otherscript.js的回调函数
我怀疑,只要回调函数在每个jQuery加载后立即执行,并且不可能在加载的jQuery和执行的回调之间交错其他脚本中的代码,就可以了。
相关文章:
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 按顺序添加和删除类
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript-根据赋值顺序,按键合并对象数组
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- querySelector/getElementByClassName嵌套项的顺序
- 以不同的顺序输出数据
- 重新排列HTML元素的顺序并更改内容
- 在Javascript中列出顺序子集元素
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- Mongodb$in以与数组中相同的顺序获取结果
- 如何使用phonegap从安卓设备中提取联系人的字母顺序
- 在表单OnChange中交换数字顺序
- 如何按对象反转Angular ngRepeat的顺序's键,这些键是数字键
- 如果其他脚本'装载顺序未知
- 当列表长度未知时按顺序调用 http.get
- 当我单击下一个按钮时,页码按未知顺序升序
- 当使用Jasmine测试Angular服务时,是脚本的包含顺序导致了这个未知的提供程序错误