JS, встроенный в другие сайты - как я могу использовать jQuery, не испортив другие установки jQuery?

Я работаю над некоторым JavaScript, который будет встроен в другие веб-сайты (например, в Google Analytics или AdSense). Выполняется какой-то хардкорный JS - запросы AJAX, анимация, JSON(P).

Я написал прототип с использованием jQuery и очень хочу продолжать его использовать, но это может вызвать проблемы при встраивании на другие сайты, если на них также установлен jQuery — возможно, даже другая версия.

Есть ли хороший способ обойти это? Лучшее решение, которое у меня есть, — просто заменить все вхождения jQuery на kQuery, а $ на $kQuery, чтобы не было конфликта имен. Какие-либо предложения? Как я могу быть максимально совместимым с их существующим JavaScript?


person Amy B    schedule 25.10.2010    source источник


Ответы (2)


Существует режим noConflict для jQuery; это то, что вам нужно. jQuery сохраняет исходные значения window.jQuery и window.$ как локальную копию, прежде чем перезаписывать их.

Итак, решение:

var kQuery = $kQuery = $.noConflict( true );

Который заменяет window.jQuery и window.$ исходными значениями и возвращает ссылку на сам jQuery.


И если вы вообще не хотите менять свой код, просто оберните его:

(function( $ ){
   // Your code with $
})( $.noConflict( true ) );
person Harmen    schedule 25.10.2010

 this might cause a problem when embedded on the other sites if they also have jQuery installed -- probably even a different version

Я не думаю, что это правда. У меня не было проблем с переключением как минимум между 3 разными версиями jQuery, он обратно совместим

person NimChimpsky    schedule 25.10.2010
comment
Возможно, я использую новые функции (например, поддержку JSONP), недоступные в предыдущих версиях. - person Amy B; 25.10.2010