2010-06-25 2 views
-1

Я разрабатываю сценарий Greasemonkey, который будет использоваться только с Firefox, и мне нужна помощь. Я планирую использовать jQuery и, возможно, некоторые другие скрипты позже. Поскольку @require для GM только загружает скрипт при начальной установке, более поздние обновления кода не будут загружать обновления для внешних скриптов.Greasemonkey: вставка в jQuery?

Поэтому мне было интересно: что произойдет, если я вставляю код raw jQuery? IE тот, который находится здесь: http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js

Не могли бы вы вызвать ошибки? Что, если сайт, на котором используется скрипт, использует jQuery 1.3.2, и я вставляю jQuery 1.4.2 на страницу или наоборот? В основном, какие недостатки или ошибки возникают, если я вставляю полный источник для скриптов, таких как jQuery, jQuery UI и т. Д.?

Спасибо!

ответ

0

Я сделал это раньше - одну длинную строку JQuery около вершины. Это не изящно, но пока работает отлично, и работает так, как ожидалось. Переменные в сценарии Greasemonkey не влияют на веб-страницу, если вы явно не используете область веб-страницы через unsafeWindow.

Это было какое-то время назад, и я верю, что jQuery 1.4 больше не работает с этим методом. Если использовать 1.3, это вариант, попробуйте это вместо этого.

-2

Включение вашего кода, скорее всего, перепишет версию jQuery на странице. В большинстве случаев это не большая проблема, хотя jQuery 1.4 не одобряет некоторые функции предыдущих версий, которые могут нарушить JavaScript уже на сайте. Наиболее примечательным является то, что pre-1.4, $() вернул документ, теперь он возвращает пустой объект jQuery.

Я думаю, что лучший способ сделать это - посмотреть, загружен ли jQuery, то есть проверить, существует ли объект jQuery, а затем проверить, существует ли функция, которую вам нужно использовать (если это функция новый для 1.4). Если нет, укажите код из кеша Google или где угодно. Вы можете выполнить запрос AJAX и выполнить возвращенный скрипт.

+2

«Включение вашего кода, скорее всего, перепишет версию jQuery на странице». Не так, это верно, только если вы отредактируете источник jQuery для использования 'unsafeWindow' вместо' window'. – erikvold

0

Для GM каждый скрипт выполнен в своей собственной области, поэтому, если вы используете @require или вставляете библиотеку (например, jQuery) непосредственно в ваш пользовательский текст (что фактически эквивалентно), это не повлияет на загрузку скриптов на странице. Таким образом, не имеет значения, загружена ли страница уже загруженной jQuery, вы все равно можете загрузить любую версию в свой почтовый индекс. Однако некоторые версии jQuery не работают в usercript, и иногда люди рекомендуют изменить ссылку на переменную window на unsafeWindow, чтобы заставить jQuery работать, если вы это сделаете, то все, что я только что сказал, выходит из окна, потому что область unsafeWindow - это место, где загружаются сценарии страницы, поэтому игра с этим означает, что вы покидаете область действия usercript.

Так что если вы хотите использовать jQuery, то найдите версию, которая может быть @require 'd (я думаю, что 1.3.2 может работать), не требуя от вас использования unsafeWindow.

Если вы должны использовать unsafeWindow, то сделайте следующее:

// check that jQuery is not already loaded 
if (!unsafeWindow.$) { 
    // paste jQuery code here.. 
} 
+0

Я понял, что это правильный ответ. И да, 1.3.2 работает, а не 1.4 – Rohan

Смежные вопросы