10
votes

Accès à des variables de Greasemonkey à la page et vice versa

J'ai le code suivant dans test.js qui est exécuté juste avant : xxx

J'ai le code suivant dans test .User.js : xxx

"plaque de cuisson" est alerté afin que je connaisse la page JavaScript fonctionne et document.title obtient des modifications Donc, je sais que le script JavaScript fonctionne. Cependant, sur la page Web, je reçois l'erreur:

Erreur: RéférenceError: Greasy n'est pas défini Fichier source: /Test.js

Comment de la page Web Dois-je accéder à la variable définie par Greasemonkey et sur la vice versa?


1 commentaires

Si vous allez de cette façon, cela ne fonctionnera que dans Firefox sous forme de brouses de sandbox chromé.


3 Réponses :


1
votes

Votre variable graisse est définie dans la portée de la fonction anonyme. Vous ne pouvez pas accéder au gras même dans votre utilisateur, à moins que cela ne fait partie de votre fonction. Exemple: xxx

le faire de cette façon: xxx

aussi, pourquoi placez-vous tout votre code dans une fonction anonyme, puis exécutant-le ?


2 commentaires

Je viens d'utiliser un script de modèle Greasemonkey et il y avait l'exemple de code dans la fonction anonyme. J'ai supposé que c'était requis pour les scripts des greasemonkey. J'ai déplacé la déclaration de Var en dehors de la fonction et je ne peux toujours pas alerter la valeur variable du script test.js à la page.


Pourrait-il être mon test de test.js est exécuté avant que Greasemonkey? Si oui, comment puis-je le retarder?



30
votes
  • Les scripts de Greasemonkey fonctionnent dans une portée distincte et peuvent également utiliser dans un bac à sable, en fonction du @Grant code> Paramètres . P> LI>

  • En outre, le code de question isole gras code> dans une portée de la fonction (a dit Glacoscc). P> LI>

  • Enfin, par défaut, test.js em> stry> sera déclencher avant que le script Greasemonkey ne voit donc aucune variables définies, de toute façon. Utilisez @ Run-au document-Démarrage CODE> pour adresser cela. p> li>


    Donc, compte tenu de ce test.js em> strud>, exécuté juste avant corpot> code>: p> xxx pré> Ensuite, ce qui suit fonctionnera: p>

    pas de sable de sable: strong> p> xxx pré>


    avec sandbox, aucune portée de la fonction, non audidewow code>: strong>

    ==> Mise à jour importante: strong> Greasemonkey a changé de manutention de l'UNSafewindow avec la version 2.0, le prochain échantillon ne fonctionnera pas avec GM 2.0 ou plus tard . Les deux autres solutions fonctionnent toujours. P>

    In GM script, local global: undefined
    In GM script, script global: greasy
    On target page, local global: stovetop
    On target page, script global: greasy
    In GM script, local global, after ready: stovetop
    


2 commentaires

btw wiki.greasespot.net/unsafewindow dis son danger d'utiliser UNSAREWINDOW, quelle serait une alternative plus sûre dans ce cas?


L'alternative "plus sûre" serait d'utiliser l'utilisation de la méthode @grant non mais remplacer inesfewindow avec fenêtre (bien qu'ils soient identiques lorsque @Grant Aucun est en vigueur), ou pour utiliser la méthode script . ... cependant, le risque d'utiliser non audidewow est grandement surélevé - sans que les exploits réels rapportés. Tant que vous n'êtes pas sur un site ciblant activement les scripts GM, il ne devrait y avoir aucun risque.



1
votes

Vous pouvez également utiliser localStorage : < Pré> xxx


0 commentaires