为什么“@grant randominvalidsetting”会激活沙箱?

时间:2013-10-16 12:56:23

标签: javascript greasemonkey

我看到some code使用此设置来激活沙箱:

@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]

它似乎与添加unsafeWindowGM_log的工作方式相同,但我似乎无法找到有关此in the documentation的任何内容(是的,我已搜索过)。我甚至用一些胡言乱语来测试它:

@grant randominvalidsetting34234239482389482394

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

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

1 个答案:

答案 0 :(得分:2)

你在哪里听到的?不过,这是真的,但我不推荐它。

来自the @grant documentation(不是问题中的链接):

  

有效值是您希望授予脚本访问权限的GM_前缀值的名称。

(加none加上unsafeWindow。)

虽然使用sandbox会起作用,但现在,我更喜欢一个更“未来证明”的值,EG GM_addStyle

Greasemonkey's source code (now superceded)可以看到,除非脚本在grant none模式下运行,否则它始终是沙箱(wrapped in an XPCNativeWrapper),因此您获得[object XrayWrapper [object Window]]

这意味着除了none之外的任何@grant值都将激活沙箱, for Greasemonkey,现在,但不能保证始终工作相同Greasemonkey,Scriptish,Tampermonkey等的方法。所以使用一个已知的有效值来激活你的沙盒。

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