Come posso ottenere greasemonkey per chiamare una funzione su una pagina dopo il caricamento
-
22-07-2019 - |
Domanda
Ho uno script greasemonkey molto semplice che voglio chiamare una funzione javascript già esistente sulla pagina. Ho letto la documentazione e nulla sembra funzionare
window.setTimeout(function() {
alert('test') // This alert works, but nothing after it does
myFunction() // undefined
window.myFunction() // undefined
document.myFunction() // undefined
}, 1000);
Soluzione
Prova a usare: unsafeWindow.myFunction ();
Maggiori dettagli e informazioni - http://wiki.greasespot.net/UnsafeWindow
Altri suggerimenti
Un modo per chiamare una funzione nella pagina originale è il seguente:
location.href = "javascript:void(myFunction());";
È un po 'brutto. C'è anche il unsafeWindow fornito anche da GreaseMonkey, ma gli autori sconsigliano di usarlo.
unsafeWindow.myFunction();
Sembra più pulito ma assicurati di aver compreso le ramificazioni. Dal manuale:
unsafeWindow ignora Greasemonkey Modello di sicurezza basato su XPCNativeWrapper, che esiste per assicurarsi che le pagine Web dannose non possono essere modificate oggetti in modo tale da creare script greasemonkey (che vengono eseguiti con più privilegi del normale Javascript in esecuzione in una pagina Web) cose che hanno fatto i loro autori o utenti non intendo. Gli script utente dovrebbero quindi evitare di chiamare o in qualsiasi altrimenti in base a qualsiasi proprietà su unsafeWindow - specialmente se se vengono eseguiti per pagine Web arbitrarie, come quelli con @include *, dove gli autori della pagina potrebbero aver sovvertito l'ambiente in questo modo.
In altre parole, lo script aumenta i privilegi disponibili per lo script della pagina originale se si utilizza unsafeWindow.
Potresti provare a usare i listener di eventi javascript.
Eseguono il codice in risposta agli eventi oggetto che si verificano (come il caricamento della pagina)
Ad esempio, per eseguire il codice al caricamento della pagina:
window.addEventListener('load', function ()
{
/* code goes here */
}