9

我是 JavaScript 和 Greasemonkey 的菜鸟,我想写一个简单的脚本。

我知道 Greasemonkey 使用匿名函数包装您的代码,因此您的变量在离开当前页面后将不存在。但是,我需要一个全局变量。我尝试使用 unsafeWindow 和 window 对象,如下所示:

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

如果我刷新页面,则条件的值始终为真。

有没有办法在 Greasemonkey 中使用全局变量?

4

4 回答 4

21

您必须使用unsafeWindow才能创建可用于页面的 javascript 范围的全局变量。

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

但是你不能指望刷新页面时这个变量会存在,因为普通的 javascript 不能那样工作。如果您想在页面加载时保存一些数据,那么我建议您使用GM_setValue & GM_getValue

于 2010-07-24T06:11:32.827 回答
4

您正在使用全局变量,但全局变量仅在页面执行时才会持续,当您刷新时,您将清除所有全局变量。在页面刷新后保存数据的唯一方法是使用 cookie、上传到服务器或 HTML5 存储 API。对于greasemonkey,您可能想要使用cookie。

于 2010-07-23T20:39:50.470 回答
3

要在 GreaseMonkey 中设置全局变量,请使用@grant none,否则使用unsafeWindow,它仅适用于 GreaseMonkey。存在一些安全问题。见http://wiki.greasespot.net/@grant

于 2014-06-25T19:11:16.807 回答
-5

如果您尝试通过多次页面刷新来维护变量,则需要将其存储在 cookie 中。

但是,如果您只想在单个页面范围内使用全局变量:

var imGlobal;
(function(){ // Greasemonkey crap...
...
imGlobal = "Totally";
})();
alert(imGlobal) // Alerts "Totally"
于 2010-07-24T06:36:05.187 回答