L'ajout d'une valeur @grant brise mon script Greasemonkey + jQuery?

Lorsque j'ajoute le @grant pour GM_xmlhttpRequest, je reçois:

Erreur: Autorisation refusée d'accéder à la propriété 'call'

Dans le fichier jQuery.
Si je supprime la subvention, cela fonctionne bien.

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

Voir "Erreur: Autorisation refusée d'accéder au gestionnaire de propriétés" .

Vous ne pouvez plus invoquer le jQuery de la page cible comme ça.

(Notez que dans @grant none mode (le défaut de GM 2), unsafeWindow est identique à la window … Mais, alors vous ne pouvez pas utiliser les fonctions GM_ ).


@require votre propre copie de jQuery; Il ne sera pas en conflit avec la page et sera chargé plus rapidement, pour démarrer.

N'utilisez pas de unsafeWindow pour des choses comme celles-ci (ou du tout, si vous pouvez l'aider), et $(document).ready() n'est pas nécessairement nécessaire pour les scripts Greasemonkey.

Votre (nouveau) exemple de script serait simplement:

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

Et vous pouvez ensuite mélanger les fonctions GM_ et votre instance de jQuery sans problème.



Remarque: Le script de question a // @include about:addons .
Les scripts Greasemonkey ne fonctionneront pas sur la page about:addons , par conception.