JQuery загружается медленнее, чем другой скрипт, который должен его использовать - PullRequest
1 голос
/ 04 сентября 2011

Хотелось бы узнать, как запустить что-то после загрузки jQuery?Получил ли jQuery событие «Я готов»?

сначала в моем getls.js

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://example.com/setls.js';
document.getElementsByTagName('body')[0].appendChild(script);

, а затем в setls.js

if (typeof jQuery == 'undefined') {  
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js';
    document.getElementsByTagName('body')[0].appendChild(script);
}
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://example.com/ls.js';
document.getElementsByTagName('body')[0].appendChild(script);

ls.js

$("body").css("background-color", "green");

Но ls.js загружается быстрее, чем jquery и сообщает мне Uncaught ReferenceError: $ is not defined.Как я могу справиться с этим событием?Спасибо за помощь.

Редактировать: Это потому, что этот скрипт будет похож на Google Analytics, вы знаете.Позволить пользователю использовать только одну строку сценария и загрузить getls.js в своем коде, что сделает его счастливым (о, круто, это всего 4 строки? Нуждающийся).Но я также должен проверить jQuery, потому что позже я буду использовать jQuery, и если я его уже получил, я не смогу загрузить его снова.После этого я хотел бы использовать его.
Так что не о document.ready событии , документ был готов до того, как я начал загружать jQuery.

Ответы [ 5 ]

2 голосов
/ 04 сентября 2011

Вы хотите загрузить оба скрипта динамически. У вас есть два варианта:

  1. Используйте onload в сценарии, который вы вводите. Он поддерживается во всех основных браузерах, но протестируйте его в IE, так как он не работал пару лет назад в IE. Это чистое решение.
  2. Опрос, используя таймер, на наличие переменной jQuery, используя typeof(window.jQuery). Когда он определен, должен быть загружен jQuery.
2 голосов
/ 04 сентября 2011

Вместо состояния гонки, просто сделайте, чтобы JQuery загрузил ваш ls.js, используя $.getScript()

$.getScript('http://example.com/ls.js', function(data, textStatus){
   console.log(data); //data returned
   console.log(textStatus); //success
   console.log('Load was performed.');
});

http://api.jquery.com/jQuery.getScript/

1 голос
/ 09 мая 2012

Проверка в цикле, пока не будет доступен jQuery:

//Have to wait until jQuery will arrive
function wait_for_jQuery(){
    if (typeof jQuery == 'undefined'){
        setTimeout(wait_for_jQuery, 50);
    }else{
        $(document).ready(main()); 
    }
}
wait_for_jQuery();

function main(){ ... };
0 голосов
/ 04 сентября 2011

В jQuery есть событие «Я готов». То, что вы хотите сделать, это обернуть ваш код в:

$(document).ready(function() {
    // Your code here
});

Это задержит выполнение кода внутри документа, готового до полной загрузки DOM и jQuery. Кроме того, размещение всех тегов сценариев внизу страницы является хорошей практикой для повышения эффективности.

0 голосов
/ 04 сентября 2011

Оберните ваш код в это:

$(document).ready(function(){

//your code

}

Это ожидает загрузки DOM и всех файлов сценариев и CSS. И убедитесь, что тег - для jquery добавлен перед вашим javascript-файлом.

...