我想在我无法控制的页面(电子商务平台)中异步包含特定版本的 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 加载和回调执行之间交错。
关于javascript - 如果其他脚本的加载顺序未知,我可以使用 noConflict() 限制我需要的 jQuery 版本的范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331083/