2010-07-23 189 views
5

我很喜歡JavaScript和Greasemonkey,我想寫一個簡單的腳本。Greasemonkey&全局變量

我知道Greasemonkey用匿名函數包裝你的代碼,所以在離開當前頁面後你的變量將不存在。不過,我需要一個全局變量。 我試圖用unsafeWindow和Window對象是這樣的:

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

如果我刷新頁面條件的值始終爲true。

有沒有辦法與Greasemonkey一起使用全局變量?

回答

4

您正在使用全局變量,但只有當刷新時頁面執行時全局變量纔會保持全部變量。通過頁面刷新保存數據的唯一方法是使用cookie,上傳到服務器或HTML5存儲API。用greasemonkey可能你會想要使用cookie。

15

您必須使用unsafeWindow才能創建可用於該頁面的JavaScript範圍的全局變量。

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

但是當刷新頁面時,你不能指望這個變量存在,因爲普通的javascript不能以這種方式工作。如果你想保存整個頁面加載一些數據,那麼我建議你使用GM_setValue & GM_getValue

+0

是否有一種方法可以跨多個頁面保存字符串,布爾值和數字之外的變量(如GM_setValue和GM_getValue)?我看到Greasemonkey的腳本可以做到這一次,但我不記得它是哪一個。 – 2012-12-20 02:14:31

+1

將對象反序列化爲JSON,然後在加載變量時對其進行序列化。 – 2013-10-09 19:21:00

-5

如果你想保持通過多個頁面刷新的變量,你需要將其存儲在cookie中。

但是,如果你只是想在一個頁面的範圍內的全局變量:

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

設置全局變量的GreaseMonkey,使用@grant none,否則,使用unsafeWindow,這是隻提供給的GreaseMonkey。有一些安全問題。請參閱http://wiki.greasespot.net/@grant