2010-07-23 26 views
5

Soy novato con JavaScript y Greasemonkey y me gustaría escribir un script simple.Greasemonkey y variables globales

Sé que Greasemonkey ajusta su código con una función anónima para que sus variables no existan después de salir de la página actual. Sin embargo, necesito una variable global. He intentado utilizar el unsafeWindow y objetos ventana de algo como esto:

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

Si actualiza la página el valor de la condición es siempre verdad.

¿Hay alguna manera de usar variables globales con Greasemonkey?

Respuesta

4

Está utilizando una variable global, pero las variables globales solo duran tanto como la página lo hace cuando actualiza borra todas las variables globales. La única forma de guardar datos después de una actualización de página es con una cookie, subir a un servidor o la API de almacenamiento HTML5. Con greasemonkey probablemente quieras usar una cookie.

15

Debe usar unsafeWindow para crear una variable global que esté disponible para el alcance de JavaScript de la página.

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

Pero no se puede esperar que exista esta variable cuando actualice la página, porque Javascript normal no funciona de esa manera. Si desea guardar algunos datos a través de la página se carga, entonces le sugiero que utilice GM_setValue & GM_getValue

+0

¿Hay alguna manera de guardar variables además de cadenas, booleanos y números en varias páginas (como GM_setValue y GM_getValue)? Vi un guión para Greasemonkey que podría hacer esto una vez, pero no recuerdo cuál era. –

+1

Desesificar el objeto en JSON, luego serializarlo cuando cargue la variable. –

-5

Si usted está tratando de mantener una variable a través de múltiples actualizaciones de página, tendrá que almacenarlo en una cookie.

Sin embargo, si usted quiere simplemente una variable global en el ámbito de una sola página:

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

para definir las variables globales de Greasemonkey, utilice @grant none, de lo contrario se utiliza unsafeWindow, que sólo está disponible para Greasemonkey. Hay algunas preocupaciones de seguridad. Ver http://wiki.greasespot.net/@grant