Greasemonkey Userscript: вставка в jQuery? - PullRequest
0 голосов
/ 25 июня 2010

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

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

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 июня 2010

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

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

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

// check that jQuery is not already loaded
if (!unsafeWindow.$) {
  // paste jQuery code here..
}
0 голосов
/ 27 июня 2010

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

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

0 голосов
/ 25 июня 2010

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

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

...