0

我看到了一些使用此设置来激活沙箱的代码:

@grant sandbox

当我在 Firefox 中运行以下基本 Greasemonkey 脚本时:

// ==UserScript==
// @name        Test
// @namespace   user12345678
// @include     http://example.com
// @version     1
// @grant       sandbox
// ==/UserScript==

console.log(window.toString());

沙盒似乎已设置:

[object XrayWrapper [object Window]]

...与您使用时不同@grant none

[object Window]

它的工作原理似乎与添加unsafeWindowor相同GM_log,但我似乎在文档中找不到任何关于此的内容(是的,我已经搜索过)。我什至用一些胡言乱语对其进行了测试:

@grant randominvalidsetting34234239482389482394

@grant sandbox这与 put或 Greasemonkey 函数作为值具有相同的效果。

如果它不在文档中,它实际上是否有效?如果不是,为什么它似乎有效?

4

1 回答 1

2

你是从哪里听来的?尽管如此,这是真的,但我不推荐它。

文档(不是问题中链接的内容)@grant

有效值是您希望脚本有权访问的那些 GM_ 前缀值的名称。

(加none号,加号unsafeWindow。)

虽然 usingsandbox会起作用,但就目前而言,我更喜欢一个更“面向未来”的值, EG GM_addStyle

正如您从Greasemonkey 的源代码(现在已被取代)中看到的那样,除非脚本在grant none模式下运行,否则它始终是沙盒(包装在 XPCNativeWrapper 中),因此[object XrayWrapper [object Window]]您得到了。

这意味着除了值之外的任何东西none都会@grant激活沙箱,对于 Greasemonkey,现在,但不能保证对于 Greasemonkey、Scriptish、Tampermonkey 等总是以相同的方式工作。所以使用已知的有效值之一来激活你的沙箱。

(为了获得最大的可移植性并消除“定时炸弹代码”,我建议始终使用沙箱。)

于 2013-10-17T02:41:22.670 回答