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これは、値としてパッティングまたは Greasemonkey 関数と同じ効果がありました。

ドキュメントに記載されていない場合、実際に有効ですか? そうでない場合、なぜ機能しているように見えるのでしょうか?

4

1 に答える 1

2

どこで聞いた?それにもかかわらず、それは本当ですが、お勧めしません。

ドキュメントから(質問でリンクされたものではあり@grantません):

有効な値は、スクリプトにアクセスを許可したい GM_ プレフィックス付きの値の名前です。

(プラスnone、プラスunsafeWindow。)

を使用してsandboxも機能しますが、今のところ、より「将来性のある」値である EG を好みますGM_addStyle

Greasemonkey のソース コード (現在は置き換えられています)からわかるように、スクリプトが モードで動作していない限り、スクリプトはgrant none常にサンドボックス化されています ( XPCNativeWrapper でラップされています) [object XrayWrapper [object Window]]

これは、Greasemonkey に対してはnone、値以外のほぼすべてのもの@grantがサンドボックスをアクティブ化することを意味しますが、Greasemonkey、Scriptish、Tampermonkey などに対して常に同じように機能するとは限りません。したがって、既知の有効な値のいずれかを使用してアクティブ化します。あなたのサンドボックス。

(そして、移植性を最大限に高め、「時限爆弾コード」を排除するために、常にサンドボックスを使用することをお勧めします。)

于 2013-10-17T02:41:22.670 に答える