Как некоторые из вас могут знать, Google Chrome наложил серьезные ограничения на скрипты Greasemonkey.
Хром не поддерживает
@require
,@resource
,unsafeWindow
,GM_registerMenuCommand
,GM_setValue
, илиGM_getValue
.
Без require я не могу найти способ включить библиотеку jQuery в скрипт Greasemonkey под Google Chrome.
У кого-нибудь есть совет по этому вопросу?
@require
, что намного проще, чем те, которые приведены в ответах.var $ = unsafeWindow.jQuery;
@require
отлично работает на сайтах, где вы не беспокоитесь о конфликте с любой из тысяч или миллионов других библиотек JS, которые связываются с $ при загрузке. Однако, если вы пишете скрипт для сайта, использующий $ для чего-то другого, или, что еще хуже, пишете скрипт для запуска на каждом сайте, используйте сравнительно безопасный механизм загрузки, описанный ниже.Ответы:
Из "Подсказки сценария пользователя: Использование jQuery - Блог Эрика Волда"
источник
script.textContent = "(" + callback.toString() + ")();";
чтобыscript.textContent = "jQuery.noConflict();(" + callback.toString() + ")();";
в моем собственном шаблоне сценария пользователя , так что не будет никаких неожиданных конфликтов. :)main()
, вы можете использовать$.loadScript()
, а затем запустить все остальное, когда loadScript завершит загрузку jQueryUI.main
будет выполняться в контексте целевой страницы, а это означает, что (помимо прочего) применяется политика межсайтовых запросов целевой страницы - (например, мне пришлось повторить ввод, преждеGM_xmlhttpRequest
чем я увидел, что он это сделал не поможет мне). В конце я просто скопировал и вставил кодjquery.min.js
.Я написал несколько функций на основе сценария Эрика Волда, чтобы помочь мне запускать функции, код и другие сценарии в документе. Вы можете использовать их для загрузки jQuery на страницу и запуска кода в глобальной
window
области видимости.Пример использования
Вы можете щелкнуть здесь, чтобы установить его, если вы уверены, что я не пытаюсь обмануть вас, чтобы установить что-то вредоносное, и что никто не редактировал мой пост, чтобы указать на что-то еще. Перезагрузите страницу, и вы должны увидеть рамку вокруг моего поста.
функции
load(url, onLoad, onError)
Загружает скрипт
url
в документ. По желанию могут быть предоставлены обратные вызовы дляonLoad
иonError
.execute(functionOrCode)
Вставляет функцию или строку кода в документ и выполняет его. Функции преобразуются в исходный код перед вставкой, поэтому они теряют свою текущую область видимости / замыкания и запускаются под глобальной
window
областью видимости.loadAndExecute(url, functionOrCode)
Ярлык; это загружает скрипт из
url
, затем вставляет и выполняет вfunctionOrCode
случае успеха.Код
источник
Используйте jQuery, не опасаясь конфликтов , по телефону
jQuery.noConflict(true)
. Вот так:Но, для кросс-браузерных скриптов, почему бы не воспользоваться хорошей, быстрой, локальной копией jQuery, когда это возможно?
Следующее работает как пользовательский сценарий Chrome и сценарий Greasemonkey и использует симпатичную локальную
@require
копию jQuery, если платформа поддерживает это.источник
$ = unsafeWindow.jQuery
если на странице есть jQuery (я проверял это только в Tampermonkey).Если на странице уже есть jQuery, просто следуйте этому шаблону:
источник
if
оператор, который проверяетwindow.location
.Простой способ - использовать
required
ключевое слово:источник
Существует действительно простой способ обойти это, включая полную копию сценариев jQuery для Chrome, когда эти сценарии фактически не используют никаких привилегированных функций ( функций GM_ * и т. Д.) ...
Просто вставьте сам скрипт в страницу DOM и выполните! Самое приятное то, что этот метод работает так же хорошо на Firefox + Greasemonkey, поэтому вы можете использовать один и тот же скрипт для обоих:
(непозволительно украдено из Shog9 на meta.stackoverflow, так как он не переместил его сюда, и я должен удалить мета-пост ..)
источник
Также вы можете упаковать свой скрипт с расширением jQuery для Chrome. См . Сценарии содержания Google Chrome .
Расширения Chrome, в отличие от скриптов Greasemonkey, могут автоматически обновляться.
источник
Более простое решение: вырезать + вставить содержимое jquery.min.js в верхнюю часть вашего пользовательского скрипта. Готово.
Я нашел различные проблемы с рекомендуемыми ответами. Решение addJQuery () работает на большинстве страниц, но на многих есть ошибки. Если вы столкнулись с проблемами, просто скопируйте + вставьте содержимое jquery в ваш скрипт.
источник
Интересно, если бы вы не могли положиться на
document.defaultView.jQuery
свой сценарий GM ала:источник
Другой подход - модифицировать ваш скрипт для загрузки jQuery вручную. Пример с http://joanpiedra.com/jquery/greasemonkey/ :
РЕДАКТИРОВАТЬ: DRATS! После тестирования кажется, что этот код не работает, так как Google Chrome запускает пользовательские скрипты / расширения в отдельной области действия / процессе от реальной веб-страницы. Вы можете загрузить код jQuery с помощью XmlhttpRequest, а затем выполнить его Eval, но вы должны разместить код на сервере, который разрешает общий доступ к ресурсам с использованием исходного кода с использованием
Access-Control-Allow-Origin: *
заголовка. К сожалению, ни один из текущих CDN с jQuery не поддерживает это.источник
Идеальное расширение для встраивания jQuery в Chrome Console настолько просто, насколько вы можете себе представить. Это расширение также вызывает, если jQuery уже был внедрен в страницу.
Это расширение используется для встраивания jQuery в любую страницу, которую вы хотите. Это позволяет использовать jQuery в консольной оболочке (Вы можете вызвать консоль Chrome с помощью «Ctrl + Shift + j»).
Чтобы встроить jQuery в выбранную вкладку, нажмите кнопку расширения.
ССЫЛКА на расширение: https://chrome.google.com/extensions/detail/gbmifchmngifmadobkcpijhhldeeelkc
источник