2013-10-16 36 views
0

我看到some code所使用此設置來激活沙箱:爲什麼「@grant randominvalidsetting」激活沙箱?

@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的功能價值相同的效果。

如果它不在文檔中,它實際上是否有效?如果不是,它爲什麼似乎工作?

回答

2

你從哪裏聽到的?儘管如此,這是事實,但我不推薦它。

the @grant documentation(不是在問題的鏈接):

有效值是你希望你的腳本將被授予訪問權限的那些GM_前綴值的名稱。

(加none,加上unsafeWindow

在使用​​會的工作,就目前而言,我更喜歡的值更 「面向未來」,EG GM_addStyle

正如你可以看到Greasemonkey's source code (now superceded),除非腳本在grant none模式下運行,它始終是沙盒(wrapped in an XPCNativeWrapper),因此,你得到了[object XrayWrapper [object Window]]

這意味着,幾乎除了none任何一個@grant值將激活沙箱,爲Greasemonkey的,現在,但它不能保證總是相同的方式工作進行了Greasemonkey,Scriptish,Tampermonkey等,所以使用激活你的沙箱的已知有效值之一。 (爲了最大的便攜性和消除「定時炸彈代碼」,我建議您始終使用沙箱。)