Внедрить jquery плюс дополнительные скрипты на веб-страницу через внешний js-файл

#jquery

#jquery

Вопрос:

Я пытаюсь внедрить два файла js / jquery на веб-страницу через внешний файл js.

Для его работы мне нужно будет внедрить фреймворк jQuery (он еще не существует на странице) и послесловия, вставляющие мои собственные файлы js.

Чтобы заставить это работать, я пытался сгенерировать инжектор jquery, но в итоге использовал один от Karl Swedberg (http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet )

Когда вы вырезаете из файла все ненужное (по крайней мере, я так думаю) и немного адаптируете его к моим потребностям, я получаю:

 (function() {
var el=document.createElement('div'),
b=document.getElementsByTagName('body')[0];
otherlib=false;
if(typeof jQuery!='undefined') {
    //msg='This page already using jQuery v' jQuery.fn.jquery;
}
else if (typeof $=='function') {
    otherlib=true;
}

// more or less stolen form jquery core and adapted by paul irish
function getScript(url,secondaryScripts, success){
    var script=document.createElement('script');
    script.src=url;
    //if (secondaryScripts)
//          script.appendChild(document.createTextNode('var jQuery = jQuery.noConflict();'));
    var head=document.getElementsByTagName('head')[0],
    done=false;
    // Attach handlers for all browsers
    script.onload=script.onreadystatechange = function(){
        if ( !done amp;amp; (!this.readyState
        || this.readyState == 'loaded'
        || this.readyState == 'complete') ) {
            done=true;
            success();
            script.onload = script.onreadystatechange = null;
            head.removeChild(script);
        }
    }
    ;
    head.appendChild(script);
}

getScript('http://code.jquery.com/jquery-latest.min.js',false, function() {
    if (typeof jQuery=='undefined') {
        //msg='Sorry, but jQuery wasn't able to load';
    }
    else {
        if (otherlib) {
            //msg =' and noConflict(). Use $jq(), not $().';
            $jq=jQuery.noConflict()

        }
    }
});

getScript('jquery-ui-1.8.16.custom.min.js', true, function() {});
getScript('script-20111006-1516.js', true, function() {});      

}
)();
  

Но это не работает, и firebug сообщает, что jquery не определен. Что кажется правильным, поскольку я не могу выполнить какой-либо jquery даже в этом скрипте, который, кажется, работает.

В мои внешние файлы вы переносите:

 (function($, 
})(jQuery);
  

примерно с тех пор, как я пытаюсь сделать так, чтобы мой скрипт не конфликтовал ни с чем, что уже запущено. Но я, вероятно, тоже делаю что-то не так и здесь 🙂

Надеюсь, кто-нибудь сможет помочь мне в правильном направлении.

С уважением, Деннис

Комментарии:

1. Можете ли вы убедиться, что букмарклет правильно настраивает jQuery? Попробуйте использовать только сам букмарклет, а затем попробуйте использовать jQuery в своей консоли. Если вы можете, то проблема в вашем коде. Если вы не можете, вам нужно найти другой jQuery-инжектор для использования (или просто создать свой собственный).

2. Сам букмарклет работает так, как должен.

3. После сна я только что понял, что рано вставляю свои скрипты.

Ответ №1:

Решение состояло в том, чтобы внедрить скрипты после полной загрузки jquery.