2014-08-27 5 views
5

Als ich die @grant für GM_xmlhttpRequest hinzufügen, erhalte ich:Das Hinzufügen eines @grant-Wertes bricht mein Greasemonkey + jQuery-Skript?

Error: Permission denied to access property 'call'

in der jQuery-Datei.
Wenn ich die Erteilung entfernen, funktioniert es gut.

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

Dank Brock, destillierte ich die Frage nach unten. – Dimi

Antwort

4

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

Sie können die jQuery der Zielseite nicht mehr so ​​aufrufen.

(Beachten Sie, dass in @grant none Modus (Standardeinstellung als von GM 2), ist unsafeWindow die gleiche wie window ... Aber dann kann man nicht GM_ Funktionen verwenden.)


@require Ihre eigenen Kopie von jQuery; Es wird nicht in Konflikt mit den Seiten und wird schneller geladen, um zu starten.

Verwenden Sie nicht unsafeWindow für solche Dinge (oder überhaupt, wenn Sie es helfen können), und $(document).ready() wird auch fast nie für Greasemonkey-Skripts benötigt.

Ihr (neu) Beispielskript würde nur sein:

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

Und Sie können dann ohne Probleme GM_ Funktionen und die Instanz von jQuery mischen.



Hinweis: Die Frage Skript hat // @include about:addons.
Greasemonkey scripts will not work on the about:addons page, by design.

+2

Vielen Dank dafür! Ich schaffte es von dort aus. Sehr geschätzt! – Dimi