Добавление значения @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
страница, по дизайну.