Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a @grant value breaks my Greasemonkey+jQuery script?

When I add the @grant for GM_xmlhttpRequest, I get:

Error: Permission denied to access property 'call'

in the jQuery file.
If I remove the grant, it works fine.

// ==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');
});
like image 526
Dimi Avatar asked Aug 27 '14 16:08

Dimi


1 Answers

See "Error: Permission denied to access property 'handler'".

You can no longer invoke the target-page's jQuery like that.

(Note that in @grant none mode (the default as of GM 2), unsafeWindow is the same as window... But, then you can't use GM_ functions.)


@require your own copy of jQuery; it will not conflict with the page's and will load faster, to boot.

Do not use unsafeWindow for things like this (or at all, if you can help it), and $(document).ready() is also almost never needed for Greasemonkey scripts.

Your (new) sample script would merely be:

// ==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>');

And you can then mix GM_ functions and your instance of jQuery with no problems.



Note: The question script has // @include about:addons.
Greasemonkey scripts will not work on the about:addons page, by design.

like image 55
Brock Adams Avatar answered Nov 06 '22 12:11

Brock Adams