#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.