Eseguire uno script Greasemonkey solo una volta per caricamento della pagina?
-
10-10-2019 - |
Domanda
Se si crea uno script Greasemonkey con @include *
e andare a un sito come YouTube, viene eseguito lo script 20+ volte ogni volta che si aggiorna. Questo è su Firefox, non sono sicuro di Chrome.
C'è un modo per evitare questo?
Soluzione
In primo luogo, probabilmente non si vuole lo script per l'esecuzione in iFrame.
Si può bloccare che l'utilizzo il @noframes
direttiva che ora funziona sia Greasemonkey e Tampermonkey a partire da ottobre 2014.
Per le versioni più vecchie, o per i motori di script che non supportano @noframes
, è possibile utilizzare questo codice, subito dopo il blocco di metadati:
if (window.top != window.self) //don't run on frames or iframes
{
//Optional: GM_log ('In frame');
return;
}
In secondo luogo, è possibile attendere e licenziare il tuo codice di GM, una volta, al caricamento della pagina. Avvolgere il tutto in un main()
e chiamare l'evento load
, in questo modo:
window.addEventListener ("load", LocalMain, false);
function LocalMain () {
// Your code goes here.
}
In terzo luogo, è possibile escludere i siti o le pagine con l'aggiunta di direttive // @exclude
al blocco di metadati.
In generale, è meglio evitare di script GM universalmente compresi, se possibile.
Altri metodi possono impostare i flag o ricaricare la pagina con parametri URL. Queste ottenere così difficile salvarli come ultima risorsa.
Altri suggerimenti
È possibile, ad esempio memorizzare la posizione indicata in una variabile persistente. Su caricamento della pagina che si controlla, se la posizione attuale è già memorizzata in questa variabile.
In caso contrario, è possibile impostare la variabile ed eseguire la funzione, se sì, non fanno nulla.
Come memorizzare le variabili persistenti: GM_setValue