Как я могу использовать jQuery в Greasemonkey? - PullRequest
226 голосов
/ 13 мая 2009

Я пытался поставить эту строку, но она не работает:

// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js

jQuery вообще не работает в Greasemonkey. Есть ли другой способ использовать jQuery в Greasemonkey?

-

Для всех людей, имеющих такую ​​же проблему, вы должны загрузить файл в greasespot, а затем установить его оттуда.

Опция Создать новый скрипт не будет работать!

Ответы [ 10 ]

182 голосов
/ 13 мая 2009

Возможно, у вас недостаточно свежая версия Greasemonkey. Это была версия 0.8, которая добавила @require.

// @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js 

Если у вас нет 0.8, используйте технику, описанную Джоан Пьедрой, для добавления элемента script вручную на страницу .

Между версиями 0.8 и 0.9 @require обрабатывается только при первой установке сценария. Если вы изменили список необходимых сценариев, вам необходимо удалить сценарий и переустановить его; Greasemonkey загружает требуемый скрипт один раз при установке и затем использует кэшированную копию.

Начиная с 0.9, поведение Greasemonkey изменилось (для решения касательно связанной проблемы ), так что теперь он загружает необходимые скрипты после каждого редактирования; переустановка скрипта больше не нужна.

77 голосов
/ 24 ноября 2010

Если вы хотите использовать jQuery на сайте, где он уже включен, это путь (вдохновленный BrunoLM):

var $ = unsafeWindow.jQuery;

Я знаю, что это не было первоначальной целью вопроса, но это становится все более распространенным случаем, и вы явно не исключали этот случай. ;)

21 голосов
/ 13 мая 2009

Нет абсолютно ничего плохого в том, чтобы включить весь jQuery в ваш скрипт Greasemonkey. Просто возьмите исходный код и поместите его вверху вашего пользовательского скрипта. Не нужно создавать тег сценария, так как вы уже выполняете JavaScript!

Пользователь в любом случае загружает скрипт только один раз, поэтому размер скрипта не имеет большого значения. Кроме того, если вы когда-нибудь захотите, чтобы ваш скрипт Greasemonkey работал в не-GM средах (таких как пользовательские скрипты GM-esque от Opera или Greasekit в Safari), это поможет не использовать уникальные конструкции GM, такие как @ require.

7 голосов
/ 24 марта 2010

Решение Роба правильное - используйте @require с библиотекой jQuery и обязательно переустановите скрипт, чтобы директива была обработана.

Одна вещь, которую, я думаю, стоит добавить, это то, что вы можете использовать jQuery обычным образом, как только включите его в свой скрипт, за исключением методов AJAX . По умолчанию jQuery ищет XMLHttpRequest, которого нет в контексте Greasemonkey. Я написал о обходном пути , где вы создаете обертку для GM_xmlhttpRequest (версия XHR для Greasemonkey) и используете jQuery ajaxSetup(), чтобы указать вашу обернутую версию по умолчанию. После этого вы можете использовать $.get и $.post как обычно.

У вас также могут быть проблемы с $.getJSON в jQuery, поскольку он загружает JSONP с помощью тегов <script>. Это приводит к ошибкам, потому что jQuery определяет функцию обратного вызова в области действия окна Greasemonkey, а загруженные сценарии ищут функцию обратного вызова в области действия основного окна. Лучше всего вместо этого использовать $.get и проанализировать результат с JSON.parse().

4 голосов
/ 30 мая 2014

Если вы используете Chrome, вы должны выбрать альтернативу, поскольку Chromium не поддерживает @require.

Источник: Проект Chromium - Пользовательские скрипты

Больше подробностей и альтернатив о Как я могу использовать jQuery в скриптах Greasemonkey в Google Chrome?

4 голосов
/ 11 апреля 2010

Обновление : Как сказано в комментарии ниже, этот ответ устарел.

Как и все остальные, @require запускается только после установки скрипта. Однако вы должны также отметить, что в настоящее время jQuery 1.4. * Не работает с greasemonkey. Вы можете увидеть здесь для деталей: http://forum.jquery.com/topic/importing-jquery-1-4-1-into-greasemonkey-scripts-generates-an-error

Вам придется использовать jQuery 1.3.2, пока все не изменится.

3 голосов
/ 23 декабря 2009

Вы можете создать новый скрипт с помощью New User Script в Greasemonkey, но вам нужно отредактировать файл config.xml в папке gm_scripts.

Ваш config.xml файл должен иметь синтаксис, аналогичный следующему:

<Script filename="jquery_test.user.js" name="jQuery Test" namespace="http://www.example.com/jQueryPlay/" description="Just a test" enabled="true" basedir="jquery_test">
        <Include>http://*</Include>
        <Require filename="jquery.js"/>
</Script>

Обратите внимание на тег <Require>.

В вашем скрипте вы можете использовать прямой синтаксис jQuery. Убедитесь, что в заголовке Greasemonkey есть тег require. Вот пример Hello World:

// ==UserScript==
// @name           Test jQuery
// @namespace      http://www.example.com/jQueryPlay/
// @description    Just a test
// @include        http://*
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.js
// ==/UserScript==

$(document).ready(function() {  
        alert("Hello world!");
});

Помните, что после изменения config.xml вам необходимо перезапустить браузер, чтобы Greasemonkey снова перезагрузил настройки.

Также обратите внимание, что вам нужно скопировать файл jquery.js в папку вашего скрипта, чтобы это работало. Я проверил это, и это работает, только если вы скопируете туда файл вручную.

Счастливого jQuerying!

2 голосов
/ 13 июля 2012

мета @require не работает, когда вы хотите отменить привязку событий к веб-странице с помощью jQuery, вам нужно использовать библиотеку jQuery, включенную в веб-страницу, а затем получить ее в Greasemonkey с помощью var $ = unsafeWindow.jQuery; Как отменить привязку Обработчики событий jquery в greasemonkey?

1 голос
/ 04 сентября 2010

Вы можете получить Component unavailable, если импортируете скрипт jQuery напрямую.

Может быть, именно об этом @Conley говорил ...

Вы можете использовать

@require        http://userscripts.org/scripts/source/85365.user.js

, которая является модифицированной версией для работы с Greasemonkey, а затем получает объект jQuery

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");
0 голосов
/ 14 февраля 2013

@require is NOT обрабатывается только при первой установке скрипта! По моим наблюдениям это обрабатывается с первого раза исполнения! Таким образом, вы можете установить скрипт с помощью команды Greasemonkey для создания нового скрипта. Единственное, о чем вам нужно позаботиться, это то, что не происходит перезагрузки страницы, потому что вы добавляете часть @require. (и сохраните новый скрипт ...)

...