Как я могу использовать jQuery в Greasemonkey?

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

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

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

-

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

Функция Create New Script не работает!

Ответ 1

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

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

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

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

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

Ответ 2

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

var $ = unsafeWindow.jQuery;

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 7

Вы можете создать новый script с помощью нового пользователя 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>.

В вашем script вы можете использовать прямой синтаксис jQuery. Убедитесь, что у вас есть тег require в заголовке Greasemonkey. Вот пример 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 в папку каталога script, чтобы это работало. Я протестировал это, и он работает только в том случае, если вы на самом деле копируете файл вручную.

Счастливый jQuerying!

Ответ 8

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

Ответ 9

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

Возможно, это то, о чем @Conley говорил...

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

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

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

var $ = unsafeWindow.jQuery;
$("div").css("display", "none");

Ответ 10

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