Wie kann ich Grease eine Funktion auf einer Seite aufzurufen, nachdem es geladen
-
22-07-2019 - |
Frage
Ich habe einen sehr einfachen Greasemonkey-Skript, das ich eine bereits vorhandene JavaScript-Funktion auf der Seite aufgerufen werden soll. Ich habe die Dokumentation zu lesen und nichts scheint zu funktionieren
window.setTimeout(function() {
alert('test') // This alert works, but nothing after it does
myFunction() // undefined
window.myFunction() // undefined
document.myFunction() // undefined
}, 1000);
Lösung
Versuchen Sie es mit: unsafeWindow.myFunction ();
Weitere Details und Informationen - http://wiki.greasespot.net/UnsafeWindow
Andere Tipps
Eine Möglichkeit, eine Funktion in der ursprünglichen Seite zu nennen, ist wie folgt:
location.href = "javascript:void(myFunction());";
Es ist ein bisschen hässlich. Es gibt auch die unsafeWindow von Greasemonkey zur Verfügung gestellt auch, aber die Autoren davon abraten, es zu benutzen.
unsafeWindow.myFunction();
Sieht ordentlicheres aber stellen Sie sicher, dass die Auswirkungen zu verstehen. Aus dem Handbuch:
unsafeWindow umgeht Grease des XPCNativeWrapper basiertes Sicherheitsmodell, die existieren, um sicherzustellen, dass bösartige Web-Seiten können nicht ändern Objekte in einer solchen Art und Weise zu machen Greasemonkey-Skripte (die ausführen mit mehr Privilegien als gewöhnliche Javascript läuft in einer Web-Seite) haben Dinge, die ihre Autoren oder Benutzer haben nicht die Absicht. Benutzer Skripte sollten Aufruf oder in daher vermeiden jedem andere Art und Weise in Abhängigkeit von irgendwelchen Eigenschaften auf unsafeWindow - especally wenn, wenn sie sind für beliebige Web-Seiten ausgeführt, wie mit @include * diejenigen, in denen die Seite Autoren haben unterminiert können die Umwelt auf diese Weise.
Mit anderen Worten, Ihr Skript erhöht die verfügbaren Zugriffsrechte auf die Originalseite Skript, wenn Sie unsafeWindow verwenden.
Sie könnten versuchen, JavaScript-Event-Listener verwenden.
Diese Ausführen von Code auf Antwort Ereignisse zum Objekt auftritt (wie Seitenlast)
Zum Beispiel Code beim Laden der Seite ausgeführt werden:
window.addEventListener('load', function ()
{
/* code goes here */
}