2014-01-07 2 views
1

Я пытаюсь выяснить, поддерживает ли пользователь jQuery 2.x
Это работает отлично, но когда я пытаюсь запустить скрипт, он не работает, потому что jQuery не выполняется загрузка ...Запуск после выбора версии jQuery

Как я могу вызвать __run() после завершения загрузки jQuery.

Init сценарий:

function __run(){ 
    // 
    // function runs the jQuery website 
    // 
    $("body").append("<p>Test</p>"); 
} 

(function() { 
    var s, s0, js; 
    if (typeof JSON !== 'undefined' && 'querySelector' in document && 'addEventListener' in window) { 
     js = '//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js'; 
    } else { 
     js = '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'; 
     alert('Woow, that\'s one old browser, maybe you should upgrade. We don\'t support this version, you can try to use the website though'); 
    } 
    s = document.createElement('script'); 
    s.type = 'text/javascript'; 
    s.async = true; 
    s.src = js; 
    s0 = document.getElementsByTagName('script')[0]; 
    s0.parentNode.insertBefore(s, s0); 
    __run(); 
}()); 
+1

Почему вы делаете это с JavaScript? гораздо проще справиться с этим, используя условные комментарии, поскольку IE является единственным браузером. –

+0

Хороший вопрос, ха-ха, по этой причине на самом деле, чтобы старые браузерные пользователи обновили свой браузер ... :-) –

ответ

2

Попробуйте

(function() { 
    var s, s0, js; 
    if (typeof JSON !== 'undefined' && 'querySelector' in document && 'addEventListener' in window) { 
     js = '//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js'; 
    } else { 
     js = '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'; 
     alert('Woow, that\'s one old browser, maybe you should upgrade. We don\'t support this version, you can try to use the website though'); 
    } 
    s = document.createElement('script'); 
    s.type = 'text/javascript'; 
    s.async = true; 
    s.src = js; 
    s0 = document.getElementsByTagName('script')[0]; 
    s0.parentNode.insertBefore(s, s0); 

    s.onreadystatechange= function() { 
     if (this.readyState == 'complete') __run(); 
    } 
    s.onload= __run; 
}()); 
+2

Возможно, вы захотите удалить встроенный вызов '__run()' перед обработчиком readistatechange. –

+0

Да, просто удалена проблема '__run()'. Удивительные ребята! –

+1

Почему вы используете как onreadystatechange, так и onload? На самом деле в вашем коде вы звоните __run() 3 раза, нет ?! –

2

Проверить с onreadystatechange

s.onload = s.onreadystatechange = function(){ 
    if (!done && (!this.readyState || 
    this.readyState == "loaded" || this.readyState == "complete")) { 

     __run(); 
    } 
}; 
+0

Спасибо, но это не решение, потому что jQuery еще не загружен ... –

+0

@bvl , Обновлено –

Смежные вопросы