Добавление значения @grant нарушает мой скрипт Greasemonkey+jQuery?

Когда я добавляю @grant для GM_xmlhttpRequest, я получаю:

Ошибка: в доступе отказано в доступе к свойству 'call'

в файле jQuery.
Если я уберу грант, он будет работать нормально.

// ==UserScript==
// @name        Dimi Test
// @namespace   Dimi
// @include     about:addons
// @version     1
// @grant       GM_xmlhttpRequest
// @include http://*.myDomain.*/*
// ==/UserScript==

var $J = unsafeWindow.jQuery;

$J(unsafeWindow.document).ready(function(){
    alert('Hello');
});

1 ответ

Решение

См. "Ошибка. В доступе к свойству" обработчик "отказано в доступе".

Вы больше не можете вызывать jQuery целевой страницы таким образом.

(Обратите внимание, что в @grant none режим (по умолчанию для GM 2), unsafeWindow такой же как window... Но тогда вы не можете использовать GM_ функции.)


@require ваша собственная копия jQuery; он не будет конфликтовать со страницей и будет загружаться быстрее для загрузки.

Не использовать unsafeWindow для таких вещей (или вообще, если вы можете помочь), и $(document).ready() также почти никогда не требуется для скриптов Greasemonkey.

Ваш (новый) пример сценария будет просто:

// ==UserScript==
// @name        Dimi Test
// @namespace   Dimi
// @version     1
// @grant       GM_xmlhttpRequest
// @include     about:addons
// @include     http://*.myDomain.*/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// ==/UserScript==

$("body").prepend ('<h1>Hello World!</h1>');

И вы можете затем смешать GM_ функции и ваш экземпляр JQuery без проблем.



Примечание: скрипт вопроса имеет // @include about:addons,
Скрипты Greasemonkey не будут работать на about:addons страница, по дизайну.

Другие вопросы по тегам