jquery - 是否可以在同一页面上加载多个不同版本的 jQuery?

标签 jquery bookmarklet

我正在制作一个书签,如果未找到该对象,它将加载 jQuery。加载将检查 jQuery 的版本。代码如下:

(function(){

    var myBkl = {
         loadScript: function(src) {
            if(window.jQuery && window.jQuery.fn.jquery == '1.3.2'){
                return;
            }
            var s = document.createElement('script');
            s.setAttribute('src', src);
            s.setAttribute('type', 'text/javascript');
            document.getElementsByTagName('head')[0].appendChild(s); 
        },
        whenLoaded: function(callback){
            if (typeof(window.jQuery) !== 'undefined' && window.jQuery.fn.jquery == '1.3.2') { 
                callback(window.jQuery); 
            } 
            else {
                setTimeout((function() {myBkl.whenLoaded(callback); }), 100);
            } 
        },
        init: function($){
            console.log($.fn.jquery);
        }
    };
    myBkl.loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js');
    myBkl.whenLoaded(myBkl.init);

})();

我使用此小书签生成器来创建小书签 http://subsimple.com/bookmarklets/jsbuilder.htm

显然,如果页面已经加载了 jQuery。 1.3.2 脚本的加载将覆盖页面上的 window.jQuery 对象。我只是想知道是否有办法让 1.3.2 加载到另一个自命名变量?使用jQuery.noConflict(true);

最佳答案

是的。我通过这段代码让它工作:

    (function(){

    var myBkl = {
         jq: null,
         loadScript: function(src) {
            if(window.jQuery && window.jQuery.fn.jquery == '1.3.2'){
                return;
            }
            var s = document.createElement('script');
            s.setAttribute('src', src);
            s.setAttribute('type', 'text/javascript');
            document.getElementsByTagName('head')[0].appendChild(s); 
        },
        whenLoaded: function(callback){
            if (typeof(window.jQuery) !== 'undefined' && window.jQuery.fn.jquery == '1.3.2') { 
                myBkl.jq = window.jQuery.noConflict(true);
                callback(myBkl.jq); 
            } 
            else {
                setTimeout((function() {myBkl.whenLoaded(callback); }), 100);
            } 
        },
        init: function($){
            console.log($.fn.jquery);
            console.log(window.jQuery.fn.jquery);
        }
    };
    myBkl.loadScript('http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js');
    myBkl.whenLoaded(myBkl.init);

})();

关于jquery - 是否可以在同一页面上加载多个不同版本的 jQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/613808/

相关文章:

javascript - 尝试获取 href 的 attr 时获取#[object Object]

jQuery $.when() 其中一个参数来自异步 "Deferred pipe"

jquery - 返回浏览器后通过 jQuery 应用 CSS 更改

javascript - Firefox 或 JavaScript,计算 DOM

javascript - 如何添加外部 javascript 文件并通过书签运行功能?

javascript - 通过书签发布到 Wayback Machine

javascript - tumblr 和 google+ 如何像拼图一样堆叠图像?

javascript - jQuery - 如何提交克隆表单?

javascript - 如何使用书签(如 Google Reader 中的注释)在任何网站的页面中显示表单?

javascript - 使用 JavaScript 书签打开当前打开站点的新网页