Comment faire en sorte que greasemonkey appelle une fonction sur une page après son chargement
-
22-07-2019 - |
Question
J'ai un script très simple, greasemonkey, que je souhaite appeler une fonction javascript déjà existante sur la page. J'ai lu la documentation et rien ne semble fonctionner
window.setTimeout(function() {
alert('test') // This alert works, but nothing after it does
myFunction() // undefined
window.myFunction() // undefined
document.myFunction() // undefined
}, 1000);
La solution
Essayez d’utiliser: unsafeWindow.myFunction ();
Plus de détails et d'informations - http://wiki.greasespot.net/UnsafeWindow
Autres conseils
Une façon d'appeler une fonction dans la page d'origine est la suivante:
location.href = "javascript:void(myFunction());";
C'est un peu moche. Il existe également le unsafeWindow fourni par GreaseMonkey également, mais les auteurs déconseillent de l'utiliser.
unsafeWindow.myFunction();
Cela semble plus net, mais assurez-vous de bien comprendre les ramifications. À partir du manuel:
unsafeWindow contourne Greasemonkey Modèle de sécurité basé sur XPCNativeWrapper, qui existe pour s'assurer que les pages Web malveillantes ne peuvent pas altérer objets de manière à faire scripts greasemonkey (qui exécutent avec plus de privilèges que d'ordinaire Javascript en cours d'exécution dans une page Web) des choses que leurs auteurs ou utilisateurs ont faites pas l'intention. Les scripts utilisateur devraient évitez donc d'appeler ou en tout autre moyen en fonction des propriétés unsafeWindow - surtout si sont exécutés pour des pages Web arbitraires, comme ceux avec @include *, où les auteurs de la page peuvent avoir subverti l'environnement de cette manière.
En d'autres termes, votre script élève les privilèges disponibles pour le script de page d'origine si vous utilisez unsafeWindow.
Vous pouvez essayer d’utiliser des écouteurs d’événement javascript.
Ceux-ci exécutent du code lors de la réponse à des événements d'objet se produisant (tels que le chargement de page)
Par exemple, pour exécuter du code au chargement de la page:
window.addEventListener('load', function ()
{
/* code goes here */
}