Мне нужно обновить версию JQuery для Bookmarklet - PullRequest
2 голосов
/ 10 октября 2010

Я создаю букмарклет, и все идет хорошо. У меня была функция, которая загружает jQuery асинхронно, если на странице его нет, а затем загружает мой скрипт или загружает мой скрипт напрямую, если на странице был jQuery.

Затем я пытаюсь использовать функцию делегата, которая доступна только в jQuery 1.4.something. Я могу проверить версию jQuery с помощью $().jquery, но затем, если я загружаю jQuery, у меня дважды появляется jQuery, а события выполняются дважды.

Есть ли способ удалить предыдущий загруженный jQuery и затем загрузить новую нужную мне версию?

Ответы [ 2 ]

1 голос
/ 10 октября 2010

Можно переместить jQuery в другое пространство имен.

//Completely move jQuery to a new namespace in another object.
var dom = {};
dom.query = jQuery.noConflict(true);

Вот немного измененный код из другого вопроса , аскер смог заставить его работать так же, как и вы, букмарклет.

/* I have attempted to change the code to check for the 1.4.x and if its not then  
   load the latest version of jQUery.  */ 
    (function(){

        var myBkl = {
                 jq: null,
                 loadScript: function(src) {
                        if(window.jQuery && window.jQuery.fn.jquery.indexOf('1.4') >= 0){
                                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.indexOf('1.4') >= 0) { 
                                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/jquery.min.js'); //this will load the latest version from google cdn
        myBkl.whenLoaded(myBkl.init);

})();

Ссылка на оригинальный источник: Можно ли загрузить несколько разных версий jQuery на одну и ту же страницу?

Другой вариант для вас, если вы должны это сделать (после того, как вы обнаружите, что вы не можете переписать свой букмарклет без .delgate(), как предлагали другие), можно иметь несколько версий jQuery на одной странице. смотрите ниже:

if (typeof jQuery == ‘undefined’) {
    appendLatestJQuery();
}
else {
    jQVersion = $().jquery;
    versionArray = jQVersion.split(‘.’);
    if (versionArray[1] < 4) {
        appendLatestJQuery();
    }
    else {
        runthis();
    }
}

function appendLatestJQuery() {
    var jQ = document.createElement('script');
    jQ.type = 'text/javascript';
    jQ.onload=runthis;
    jQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
    document.body.appendChild(jQ);
}
function runthis() {
    var $j = jQuery.noConflict(true);

    //now use $j for your code here

}
1 голос
/ 10 октября 2010

Да, но вы будете ломать страницу, когда будете делать это, поэтому я настоятельно рекомендую не делать этого.Чтобы удалить сам jQuery:

 jQuery.noConflict(true);

Это просто, чтобы показать, что это можно сделать (хотя он не удаляет все эффекты , которые у него были), в вашем случае Iне сделает этого , то, что вы делаете, действительно сломает веб-страницу, на которой работает ваш букмарклет.

Вместо этого, подумайте, нуждается ли ваш букмарклет в в новейшем API jQuery, подойдет ли версия за вами?Если это так, то используйте его, даже если он немного менее эффективен, поэтому он работает вне зависимости от того, имеет ли страница более старую версию или нет.

...