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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top