はじめに
制限付き特権を持つ環境下で JavaScript のコードを評価したい場合があるかもしれません。Firefox 1.5 (Gecko 1.8) 以降にはこのための API が存在します。それにはそのコンテキスト内でコードを作成し、評価できる「サンドボックス (sandbox)」という概念が含まれています。このメソッドを用いて評価されるコードは常に普通のウェブページと同様の制限付き特権を持つ環境下で評価されます。
使用法
evalInSandbox を使用するには、まず Components.utils.Sandbox
というコンストラクタを用いてサンドボックスオブジェクトを作成する必要があります。サンドボックスは主要な URI で初期化しなければなりません。この URI は同一生成元 (same origin) セキュリティチェックに使用されます。例えば、https://www.example.com/
という URI を渡すと、このサンドボックスを用いて評価されるコードは https://www.example.com からのデータにアクセスできるようになります。ウェブページの JavaScript から document.domain
をセットして同一生成元セキュリティチェックを変更することができるため、DOM window オブジェクトをサンドボックスのコンストラクタに渡してしまうこともできます。
// 主要な URI を渡してサンドボックスを作成 var s = Components.utils.Sandbox("https://www.example.com/"); // サンドボックスオブジェクトは実行するスクリプトに対して // グローバルスコープを持つ s.y = 5; var result = Components.utils.evalInSandbox("x = y + 2; x + 3", s); // result は 10、s.x は 7 となる s.foo = Components; // この場合は "Permission Denied" というエラーが生じる Components.utils.evalInSandbox("foo.classes", s);