TamperMonkey-Funktion nach window.location.href-Wechsel ausführen

English Deutsch

Beim Automatisieren von Workflows mit TamperMonkey-Skripten haben Sie oft eine Situation, in der Sie eine Funktion ausführen, dann window.location.href setzen und nach dem Laden der neuen Seite einen weiteren Teil Ihres Codes ausführen möchten. Da der Browser die Seite jedoch physisch neu lädt, wird auch das Tampermonkey-Skript neu geladen - daher wird Ihre ursprüngliche Funktion nicht mehr ausgeführt.

Die Lösung ist einfach, sobald man das Konzept verstanden hat:

  1. Vor dem Neuladen der Seite setzen wir einen spezifischen Schlüssel in sessionStorage, der angibt, was wir tun möchten, sobald die Seite vollständig geladen ist
  2. Dann können wir window.location.href setzen
  3. Bei jedem Seitenladen überprüfen wir, ob der Schlüssel gesetzt ist, und führen gegebenenfalls die entsprechende Funktion aus und löschen den Schlüssel

Beachten Sie, dass im TamperMonkey-Kontext dies auf Seiten beschränkt ist, die in der @match-Konfiguration des Skripts enthalten sind (andernfalls wird das Skript auf der neu geladenen Seite nicht ausgeführt):

tampermonkey-continuation.user.js
// ==UserScript==
// @name         TamperMonkey continuation example
// @namespace    http://tampermonkey.net/
// @version      0.1
// @author       You
// @match        https://techoverflow.net
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
    const continuationKey = "_my_script_continuation_key"; // Dieser sessionStorage-Schlüssel

    // Fortsetzung prüfen
    const continuationActions = {
        "printMsg": onPrintMsg
    };
    const _continuation = sessionStorage.getItem(continuationKey);
    if(_continuation) {
        sessionStorage.removeItem(continuationKey);
        const action = continuationActions[_continuation]
        if(action) {action();}
    }

    function onPrintMsg() {
        console.log("Dies wird nach dem Neuladen der Seite ausgeführt");
    }

    function onAltQ() {
        console.log("Seite wird nun neu geladen...");
        sessionStorage.setItem(continuationKey, "printMsg");
        window.location.href = window.location.origin + "/";
    }

    function onKeydown(evt) {
        // Verwenden Sie https://keycode.info/ um Tasten abzurufen
        if (evt.altKey && evt.keyCode == 81) {
            onAltQ();
        }
    }
    document.addEventListener('keydown', onKeydown, true);
})();

Check out similar posts by category: Javascript