JQuery в Greasemonkey 1.0 конфликтует с сайтами, использующими jQuery
С тех пор как новый Greasemonkey 1.0 был выпущен несколько дней назад, каждый сайт, в котором есть jQuery и где я использую jQuery в своем Greasemonkey script, не запускает мой script должным образом. JQuery, который у меня есть в моем GS script (с использованием метаданных @require
), конфликтует со страницей jQuery. Это связано с новым @grant
.
Я прочитал документацию, но до сих пор не знаю, как запустить GS-скрипты в песочнице; единственные варианты, похоже, либо предоставляют доступ к GS API, либо не предоставляют его никому, а запускают script без каких-либо ограничений безопасности, что для меня не работает, когда я разработал десятки сценариев GS для выполнения ограничений безопасности и т.д.
Ответы
Ответ 1
Greasemonkey 1.0 радикально изменил способ работы песочницы, разрушив тысячи скриптов. Это огромная проблема, и я надеюсь, что вы присоединитесь ко мне, чтобы выразить свое мнение/опыт по основному отчету об ошибке для этой проблемы.
Блог Greasemonkey утверждает, что вы можете решить эту проблему следующим образом:
this.$ = this.jQuery = jQuery.noConflict(true);
... Который я не уверен, будет работать во всех случаях. И это точный неправильный подход от принципа устранения побочных эффектов, DRY-принципа, атомарного кодирования. На мой взгляд, лучшей стратегией является восстановление песочницы.
@grant
песочницу, указав значение @grant
(кроме none
). Измените блок метаданных, чтобы завершить следующие строки:
// @grant GM_addStyle
// @grant GM.getValue
// ==/UserScript==
/*- The @grant directive is needed to work around a design flaws introduced in GM 1.0
and again in GM 4.0.
It restores the sandbox.
*/
Песочница будет восстановлена, и все конфликты будут разрешены.
И скрипты будут совместимы с такими превосходными двигателями, как Tampermonkey и Violentmonkey.
Ответ 2
Два года спустя, и эта "функция" до сих пор не была достаточно документирована или исправлена.
Скрипты, требующие jQuery, все еще конфликтуют с некоторыми страницами, использующими jQuery.
Потенциальные решения:
- Добавьте
@grant GM_log
или аналогичную песочницу script
-
Псевдоним существующих объектов jQuery в script путем добавления этого блока:
var my_jquery = jQuery;
jQuery.noConflict(true);
var $ = my_jquery, jQuery = my_jquery;
-
Не используйте jQuery
В общем, страшное решение от Greasemonkey.
Ответ 3
Имела ту же проблему.
С версии GM версии 1.0 все мои скрипты, которые @require
jQuery, запущенные на сайтах, которые также используют jQuery, перестали работать.
Я знаю, я мог бы попробовать что-то вроде $ = unsafeWindow.$
, но это не главное.
Дело в том, что они работали, и теперь они не будут.
Добавление @grant GM_log
исправлено.