2016-06-12 35 views
1

Ich habe zwei verschiedene Skripte. Am Ende von einem wird eine neue Webseite geöffnet, die das andere Skript startet und dann darauf wartet, dass das Skript einen Wert auf "true" setzt, damit das erste Skript eine andere Seite öffnen kann.JavaScript, Tampermonkey GM_setValue und GM_getValue

Dies ist das Skript für die Funktion, die am Ende des ersten Skripts aufgerufen wird. Es wartet darauf, dass der Flag-Wert continueValue auf "true" gesetzt wird. Die Konsole zeigt immer wieder die "Prüfflags" -Meldung an, was bedeutet, dass das andere Skript den Wert nicht auf "wahr" ändert.

function checkFlag() { 
    console.log("Checking flag"); 
    if(GM_getValue("continueValue") === false) { 
     window.setTimeout(checkFlag, 2000); /* this checks the flag every 3000 milliseconds*/ 
    } else { 
     //--- Opens the next cove 
     if (!(currentCoveNum = -1)) { 
      window.open(coveLinks[currentCoveNum + 1],"_self"); 
     } 
    } 
} 

Am Ende des folgenden Code nächste Skript ausgeführt wird:

//--- If the text "Next Creature" exists on the page, click next creature button 
if ((document.documentElement.textContent || document.documentElement.innerText).indexOf('Next Creature') > -1) { 
    window.location.href = nextCreatureLink[0].href; 
//--- Otherwise set the continue value to true to allow Super Auto Feed, Open Coves to open the next cove 
} else { 
    GM_setValue("continueValue", true); 
    console.log("continueValue is "+GM_getValue("continueValue")); 
    setTimeout(function() { 
     window.close(); 
    }, (2 * 1000)); 
} 

Das Problem ist, wenn dieses Skript die Nachricht erreicht, zeigt es „continueValue“ wahr, was bedeutet, dass das andere Skript sollte öffne die nächste Seite, aber nicht. Es prüft nur, ob die Flagge wahr wird.

Ich frage mich, vielleicht funktionieren getValue und setValue nicht zwischen Skripten? Oder vielleicht ist etwas mit der Schleife der Überprüfung, dass die Flagge wahr wird, falsch.

Wenn mir jemand erklären könnte, wo mein Skript falsch ist, wäre ich sehr dankbar.

Antwort

1

GM_setValue und GM_getValue führen im selben Skript eine Kreuztabelle oder ein Fenster aus, aber sie führen kein Cross-Skript aus. Wenn der Wert in einem Skript festgelegt wird, wird der Wert für das andere Skript nicht geändert.

Versuchen Sie lokale Speicherung oder Speicherung in einer externen Datenbank.

+0

Abhängig von den Domänen kann auch postMessage funktionieren. https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage –