2010-07-23 19 views
5

Ich bin noob mit JavaScript und Greasemonkey und ich möchte ein einfaches Skript schreiben.Greasemonkey & globale Variablen

Ich weiß, dass Greasemonkey Ihren Code mit einer anonymen Funktion umschließt, damit Ihre Variablen nicht bestehen, nachdem Sie die aktuelle Seite verlassen haben. Ich brauche jedoch eine globale Variable. Ich versuchte, das unsafeWindow zu verwenden und Fensterobjekte etwas wie folgt aus:

if (window.myVar == undefined) { 
    window.myVar = "myVar"; 
} 

Wenn ich die Seite der Zustand des Wert aktualisieren immer wahr ist.

Gibt es eine Möglichkeit, globale Variablen mit Greasemonkey zu verwenden?

Antwort

4

Sie verwenden eine globale Variable, aber globale Variablen dauern nur so lange wie die Seite. Wenn Sie aktualisieren, werden alle globalen Variablen gelöscht. Die einzige Möglichkeit zum Speichern von Daten nach einer Seitenaktualisierung besteht in einem Cookie, einem Upload auf einen Server oder der HTML5-Speicher-API. Mit greasemonkey möchten Sie wahrscheinlich einen Cookie verwenden.

15

Sie müssen unsafeWindow verwenden, um eine globale Variable zu erstellen, die für den JavaScript-Bereich der Seite verfügbar ist.

Aber Sie können nicht erwarten, dass diese Variable existiert, wenn Sie die Seite aktualisieren, weil normales JavaScript nicht so funktioniert. Wenn Sie einige Daten auf Seite lädt speichern wollen, dann schlage ich vor, dass Sie GM_setValue & GM_getValue

+0

Gibt es eine Möglichkeit, Variablen neben Strings, booleans und Zahlen über mehrere Seiten (wie GM_setValue und GM_getValue) zu speichern? Ich habe ein Skript für Greasemonkey gesehen, das das einmal machen kann, aber ich erinnere mich nicht, welches es war. –

+1

Deserialisieren Sie das Objekt zu JSON, und serialisieren Sie es dann, wenn Sie die Variable laden. –

-5

verwenden Wenn Sie versuchen, eine Variable durch mehrere Seitenaktualisierungen zu erhalten, müssen Sie es in einem Cookie gespeichert werden sollen.

Allerdings, wenn Sie einfach eine globale Variable im Rahmen einer einzigen Seite angezeigt werden sollen:

var imGlobal; 
(function(){ // Greasemonkey crap... 
... 
imGlobal = "Totally"; 
})(); 
alert(imGlobal) // Alerts "Totally" 
1

globale Variablen in Greasemonkey zu setzen, benutzt @grant none, sonst nutzt es unsafeWindow, was zu Greasemonkey nur zur Verfügung steht. Es gibt einige Sicherheitsbedenken. Siehe http://wiki.greasespot.net/@grant