Задать вопрос

Загрузка отдельной версии jQuery в замыкание?

Родилась проблема — на некотором сайте есть необходимость подключать мой js.

Там есть jQuery старой версии, но мне нужен новый.

Обратное неверно — новый jQuery заменит старый и сломает сайт.



Я соорудил нечто такое (jsfiddle):



$(function () {<br>
    var $ = null,<br>
        script = document.createElement('script');<br>
    script.type = 'text/javascript';<br>
    script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js';<br>
    document.getElementsByTagName('head')[0].appendChild(script);<br>
    script.onload = function () {<br>
        $ = jQuery.noConflict(true);<br>
        // мой код //<br>
    };<br>
});<br>




Собственно, вопрос — это нормально?

Я вижу потенциальную проблему в промежутке времени от реально перегруженного $ до вызова noConflict.
  • Вопрос задан
  • 3902 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@1x1
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>$new = $.noConflict();</script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

..

<script>
console.log($().jquery));
(function($) {
    console.log($().jquery));
})($new);
console.log($().jquery));
</script>

Ответ написан
Да, нормально. А опасного промежутка для предыдущего (не вашего кода) нет, так как загружаемый код(1.8.3/jquery.min.js) выполняется синхронно с последующим вызовом onload функции, где вызывается noConflict.

Из вашего примера достаточно не однозначно вызывается log(2, $); — конечно же $ будет не определён в скупе. Что бы пользоваться $ версией 1.8.3 нужно дождаться onload.
Ответ написан
Fr3nzy
@Fr3nzy
Быть может вам поможет github.com/jquery/jquery-migrate/? Или с переписыванием старого функционала не хочется сталкиваться?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы