Я добавляю некоторые теги <script/>
из javascript для загрузки некоторых библиотек (например, jquery). Когда все библиотеки загружены, я выполняю основной код. Чтобы дождаться, пока все будет готово, я использую решение, аналогичное тому, что приведено в этом ответе. (нашла в Интернете).
Теперь история: http://jsfiddle.net/EH84z/
function load_javascript(src) {
var a = document.createElement('script');
a.type = 'text/javascript';
a.src = src;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(a, s);
}
load_javascript('http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js');
function addEvent(elm, evType, fn, useCapture) {
//Credit: Function written by Scott Andrews
//(slightly modified)
var ret = 0;
if (elm.addEventListener) {
ret = elm.addEventListener(evType, fn, useCapture);
} else if (elm.attachEvent) {
ret = elm.attachEvent('on' + evType, fn);
} else {
elm['on' + evType] = fn;
}
return ret;
}
addEvent(window, "load", function() {
console.log(window.jQuery + ' ' + window.$);
$(document);
}, false);
Он отлично работает в Firefox, но довольно часто дает сбои в Chrome. Каждый второй раз, когда я нажимаю кнопку запуска jsfiddle, обратный вызов выполняется до загрузки JQuery, что приводит к ошибке в консоли Chrome.
Означает ли это, что я ужасно злоупотребляю addEventListener
? Если да, то как правильно его использовать и как мне на самом деле дождаться загрузки всех скриптов?
Спасибо!
PS Пока не проверял его в других браузерах, поэтому, пожалуйста, прокомментируйте, если он не работает где-то еще.
редактировать
если я подожду одну секунду (используя setTimout
) перед тестированием, вероятность успеха увеличится до 100%. Пример http://jsfiddle.net/EH84z/1/