Frage

Wenn Sie einen Greasemonkey-Skript mit @include * erstellen und gehen Sie zu einer Website wie youtube, es läuft das Skript 20+ mal jedes Mal, wenn Sie aktualisieren. Dies ist auf Firefox, nicht sicher über Chrome.
Gibt es einen Weg, um dieses?

zu verhindern
War es hilfreich?

Lösung

Als erstes werden Sie wahrscheinlich nicht wollen, dass das Skript in iFrames laufen.
Sie können blockieren, dass die @noframes Richtlinie verwendet, die beide Werke nun in Greasemonkey und Tampermonkey ab Oktober 2014.

Für ältere Versionen oder für Skriptmodule, die nicht @noframes unterstützen, können Sie diesen Code verwenden, kurz nach dem Metadatenblock:

if (window.top != window.self)  //don't run on frames or iframes
{
    //Optional: GM_log ('In frame');
    return;
}


Zweitens können Sie warten und feuern Sie Ihre GM-Code, einmal, beim Laden der Seite. Wrap alles in einem main() und nennt es auf dem load Ereignisse, etwa so:

window.addEventListener ("load", LocalMain, false);

function LocalMain () {
    // Your code goes here.
}


Drittens können Sie Websites oder Seiten ausschließen, indem // @exclude Direktiven an den Metadaten-Block hinzugefügt wird.

Insgesamt ist es am besten universell enthalten GM-Skripte zu vermeiden, wenn möglich.

Andere Methoden könnten Flags gesetzt oder die Seite mit URL-Parametern neu zu laden. Diese bekommen knifflige so speichern sie als letztes Mittel.

Andere Tipps

Sie können zum Beispiel speichern den bestimmten Ort in einer persistenten Variablen. Auf Seite zu laden, müssen Sie prüfen, ob der aktuelle Standort bereits in dieser Variable gespeichert wird.

Wenn nicht, können Sie die Variable und Ihre Funktion ausführen, wenn ja nichts zu tun.

Wie persistente Variablen speichern: GM_setValue

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top