Как работать с jQuery и оставаться агностиком к его версии?
Мы разрабатываем фрагмент, встроенный в сторонние сайты, и использует jQuery.
Фрагмент проверяет, загружен ли сайт jQuery. Если это так, она использует эту библиотеку, в противном случае она загружает нашу собственную копию (в настоящее время jQuery 1.4.4, мы скоро переходим к последнему).
В jQuery происходят изменения. Одним из таких изменений является, например, изменение в семантике attr()
и введение prop()
.
Есть ли какие-то рекомендации по работе с jQuery таким образом, чтобы они были максимально совместимы с обратной связью? Даже когда мы переходим к последним, мы по-прежнему хотим использовать существующую библиотеку jQuery, если она существует вместо загрузки новой копии, чтобы сохранить время загрузки и ресурсы.
Ответы
Ответ 1
Есть несколько решений вашей проблемы
1. Используйте подмножество jQuery
Найдите подмножество jQuery, которое работает до разумной суммы и только использует это подмножество.
Обратите внимание, что я рекомендую не использовать .attr
вообще. поскольку a) это минное поле и b) оно имеет различное поведение в разных версиях. Вы можете найти разумное подмножество jQuery довольно мало. Удачи вам в этом.
2. Просто используйте последнюю версию
Используйте последнюю версию jQuery и сообщите пользователям своей библиотеки, что они должны обновиться.
Серьезно все должны использовать последнюю версию, чтобы заставить их обновиться.
3. Не используйте jQuery
У меня нет зависимости от jQuery.
Серьезно, чем меньше зависимостей у вас, тем лучше ваш код
Я предпочитаю 3. как оптимальное решение
Ответ 2
Взгляните на эти рекомендации:
http://www.davidtong.me/upgrading-jquery-from-1-4-x-to-1-6-1/
это не самая последняя версия jQuery, но она достаточно горячая.
Версия 1.6.4 является незначительной версией
Начиная с версии 1.6.4 до 1.7.x были добавлены некоторые новые функции и исправления, но ничего не похоже на то, что код написан для версии jQuery 1.6
Ответ 3
Это один из моих любимых мобов с jQuery, хотя мне нравится то, что он (jQuery) позволяет в целом.
Мне жаль, что команда jQuery не решила бы эту проблему в начале разработки и не создала метод инициализации версии, чтобы вы могли "запрашивать" конкретную версию при создании вашей библиотеки. В идеале у вас будет:
(function($, undefined) {
// your code
}(jQuery.noConflict(false, "1.4.4")));
Где jQuery.noConflict примет "ключ", для которого версия API вы хотите использовать для этой библиотеки. Каждый загруженный jQuery будет проверять автоматически, если предыдущий jQuery был загружен, и создать для него новую ссылочную запись в ассоциативном массиве. (проверьте jQuery/$, запросите jQuery.jquery, чтобы получить версию, запросите jQuery.loadedVersions, чтобы получить предыдущие ассоциации, и создайте главный список всех загруженных API). Если действительная библиотека не найдена, она может по умолчанию использовать последнюю доступную версию или просто выпустите ошибку.
Конечно, это не поможет вам (если вы не хотите модифицировать подмножество API-интерфейсов jQuery и держать их в курсе самого себя... /yuck ), но, к сожалению, это немного дерьмовая стрельба.
noConflict вернет jQuery API, если $не является текущим jQuery API (таким образом, не перезаписывая $), но он не справляется с конфликтами API, и вы получите только последний загруженный API jQuery. Он просто проигнорировал бы первый загруженный API (потому что он не === для текущего объекта jQuery области кода) и возвратил себя.