Есть ли хороший способ предотвратить переопределение jQuery? - PullRequest
2 голосов
/ 10 февраля 2010

Я столкнулся с проблемой, которая заняла у меня некоторое время для отладки, когда плагин, который я использовал для jQuery (в данном случае jFeed), не работал. Проблема закончилась тем, что мы также использовали предварительный просмотр продуктов Amazon Associates . Код предварительного просмотра продукта заканчивается включением ряда других файлов JS через document.write (), включая другую копию jQuery. Поскольку код предварительного просмотра продукта появился под сценарием jFeed, jQuery был переопределен без функции getFeed.

Есть ли лучший способ убедиться, что некоторые объекты, такие как jQuery, определяются на странице только один раз? Я думаю о чем-то вроде #ifndef с C / C ++, но я не знаю, как это будет работать в этом случае, когда я не писал код, который снова динамически вытягивал jQuery.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2010

Я думаю, что в вашей ситуации, вероятно, было бы лучше переопределить переменную jQuery как-то еще. Другой код jQuery может использовать другую версию, поэтому вы можете определить новую переменную, которая будет указывать, какой jQuery вы используете.

Вы могли бы что-то вроде этого:

 <script>
    var $jMain = jQuery;
 </script>

Вы бы просто использовали $jMain вместо jQuery или $. Это будет зависеть от вас, чтобы убедиться, что у вас есть правильный объект jQuery, когда вы делаете это. Вот документация .

0 голосов
/ 10 февраля 2010

К сожалению, среда внутри одной песочницы JS (например, внутри окна или рамки браузера) на самом деле не была разработана для поддержки современного мира загрузки сценариев из разных мест; Вы не можете сказать «определите этот объект и сделайте его устойчивым к переопределению». (Вы даже можете переопределить большинство встроенных Javascript, если попытаетесь!)

Ваш лучший способ - убедиться, что ваш код eval'd последний, что дает вам окончательное мнение о состоянии среды при запуске. Это не означает, что другой код не может появиться позже и затереть ваши определения, но это, как правило, очень плохая форма. Вы можете сделать это, например, указав тег скрипта последним элементом в теле документа.

См. Также этот метод jQuery, который не поможет вам напрямую, но заставляет задуматься о некоторых решениях для совместного использования страниц: http://api.jquery.com/jQuery.noConflict/

...