Защита от подключения jQuery несколько раз

2010-04-28

В больших проектах может возникнуть проблема, когда jQuery подключается несколько раз. Что же делать?

Действительно, когда проект большой, и состоит из многих независимых логических частей, которые могут присутствовать или отсутствовать по наперед неопределенному принципу — может возникнуть подобная проблема.
К примеру, Вы в своей части кода подключили jQuery и повесили некоторый набор плагинов. После этого другой программист добавляет другую часть кода, которая расположена ниже. Он тоже подключает эту замечательную библиотеку jQuery, не подозревая о том, что она в некоторых вариантах станицы уже может быть подключена. Естественно все ваши плагины и навешанные функции умножатся на ноль, то-есть — исчезнут в неизвестном направлении. Как же избежать подобной проблемы?

И тут нас спасает структура самого jQuery, а именно то, что jQuery не засоряет пространство имён, а инициализирует всего лишь объект window.jQuery и более короткий псевдоним — window.$.
Таким образом нам нужно всего лишь проверить инициализирован ли уже jQuery, и если нет — то проинициализировать его.

Это можно сделать несколькими вариантами:

1. Самый простой и безопасный:
Открываем саму библиотеку, и оборачиваем ее таким вот образом:


// !!!
// Sometimes jQuery can be included more then ones,
// and after each next including
// all jquery-plugins removing automatically.
// That is why next check-code was set.
// This code initing jQuery
// just if it was not inited early.
if(window.jQuery == undefined) {
// здесь будет весь исходный код jQuery
//...
}

После этого можно переименовать имя файла, к примеру, на такое:
jquery-1.3.2.if-undefined.min.js во избежание случайного перетирания и подключать его. Хотя в этом случае придется изменить имя библиотеки во всех файлах где она подключается, а это не очень эффективно. К тому же в будущем может найтись человек, который не будет знать об этом фиксе или просто забудет о нем, и подключит библиотеку со стандартным именем.
Если же имя оставить стандартным, эта защита сработает везде автоматически.
Так что решать Вам.

Недостаток этого фикса тот, что библиотека может полностью подгружаться несколько раз. Хотя, если Вы не используете различные javascript-миксеры, оптимизацию яваскриптового кода путём склеивания, прочее, то, скорее всего, браузер просто повторно возьмёт эту библиотеку со своего кэша. Тем не менее есть второй, более красивый вариант:

2. Этот способ заключается в том, чтобы проверить яваскриптом инициализирована ли библиотека, и если нет — то сгенерировать запрос на ее подключение. Делается это просто:

<script type="text/javascript">
if(window.jQuery==undefined) {
document.write(unescape("%3Cscript src='/js/jquery-1.3.2.min.js' type='text/javascript'%3E%3C/script%3E"));
}
</script>

Особенностью данного метода является то, что jQuery начнёт грузиться только после полной загрузки страницы. Это значит, что Вы должны учесть это, чтобы Ваш код не начал выполнять раньше чем подключится библиотера. А также все плагины придется подключить таким же образом через document.write.



2 комментария на «Защита от подключения jQuery несколько раз»

  1. Игорь:

    Не понятно,
    «Открываем саму библиотеку, и оборачиваем ее таким вот образом:»
    А где взять саму библиотеку, т.е. куда добавлять код?
    «После этого можно переименовать имя файла, к примеру, на такое:»
    Какой файл переименовать?

  2. Сергей:

    Игорь, библиотека берётся там, куда вы её загрузили.
    Код подключения на примере jQuery UI.

    Скачиваете библиотеку с официального сайта, на свой сайт в папку со скриптами например. Открываете скачанную библиотеку и вставляете в самое начало данный код. В плане «обёртки» это делается так.

Добавить комментарий