5

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');
});
Brock Adams
  • 90,639
  • 22
  • 233
  • 295
Dimi
  • 67
  • 1
  • 7

1 Answers1

5

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.

Community
  • 1
  • 1
Brock Adams
  • 90,639
  • 22
  • 233
  • 295