Javascript jQuery无冲突IE问题

Javascript jQuery无冲突IE问题,javascript,jquery,Javascript,Jquery,我正在构建一个依赖于jquery加载的小部件——我使用以下方法加载它和我的代码: (function () { var jqueryVersion = (window.jQuery !== undefined) ? window.jQuery.fn.jquery.charAt(0) + window.jQuery.fn.jquery.charAt(2) : 0; var jQuery; /******** Called once jQuery has loaded *

我正在构建一个依赖于jquery加载的小部件——我使用以下方法加载它和我的代码:

(function () {

    var jqueryVersion = (window.jQuery !== undefined) ? window.jQuery.fn.jquery.charAt(0) + window.jQuery.fn.jquery.charAt(2) : 0;

    var jQuery;
    /******** Called once jQuery has loaded ******/
    function scriptLoadHandler() {
        jQuery = window.jQuery.noConflict(true);
        main();
    }

    /******** Load jQuery if not present *********/
    if (parseInt(jqueryVersion) < 17) {
        var script_tag = document.createElement('script');
        script_tag.setAttribute("type", "text/javascript");
        script_tag.setAttribute("src", "//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js");
        script_tag.onload = scriptLoadHandler;
        script_tag.onreadystatechange = function () { // Same thing but for IE
            if (this.readyState === 'complete' || this.readyState === 'loaded') { scriptLoadHandler(); }
        };
        document.getElementsByTagName("head")[0].appendChild(script_tag);
    } else {
        jQuery = window.jQuery;
        main();
    }

    function main() {
        //my code goes in here
        //leaving blank for now because I still get error
    }

})();


我做错什么了吗

您的问题可能是由于“handler”被调用了两次

还有,取自

如果需要,还可以通过传递true释放jQuery名称 作为方法的参数。这很少是必要的,如果 必须这样做(例如,如果需要使用 JQuery库在同一页面上,你需要考虑的最多 插件依赖于jQuery变量的存在,可能不依赖 在这种情况下正确操作。”


因为这个小部件在其他人的网站上运行,所以除了添加小部件之外,我不想让他们更新jQuery版本。我想到了
var jQuery的要点
用于本地化该变量。我应该将正在加载的jQuery存储为另一个变量吗?如果我不需要在
noConflict()
@user1114701中传递
true
,我更新了答案,尝试将其别名为一个新变量,并使用该新变量。在尝试解决这个问题时,我注意到在IE>8中,scriptLoadHandler()被调用了两次。我设置了一个条件,IE使用
script\u标记.onreadystatechange
,其他人使用
script\u标记.onload
,问题似乎得到了解决。知道为什么吗?不确定,可能是因为IE同时支持这两种功能。在这种情况下,处理程序将被调用两次。@user1114701添加了一个解释可能发生的情况的引用。当版本1.10发布时,您的
jQueryVersion
检查将出现严重错误。出于兴趣,是否没有机会升级站点中的主jQuery?在同一个站点上有多个jQuery版本确实有效(多亏了
.noConflict
),但如果不需要,则需要大量额外下载。
jQuery = window.jQuery.noConflict(true);
jQuery = window.jQuery.noConflict();