blob: 6c0cd7bf788bf405759b58ad090c006839ec65d2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
---
title: Components.utils.evalInSandbox
slug: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.evalInSandbox
tags:
- Add-ons
- Developing Mozilla
- Extensions
- JavaScript
- 'XPCOM:Language Bindings'
- XPConnect
translation_of: Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.evalInSandbox
---
<p>
</p>
<h3 id="はじめに"> はじめに </h3>
<p>制限付き特権を持つ環境下で <a href="ja/JavaScript">JavaScript</a> のコードを評価したい場合があるかもしれません。<a href="ja/Firefox_1.5">Firefox 1.5</a> (Gecko 1.8) 以降にはこのための API が存在します。それにはそのコンテキスト内でコードを作成し、評価できる「サンドボックス (sandbox)」という概念が含まれています。このメソッドを用いて評価されるコードは常に普通のウェブページと同様の制限付き特権を持つ環境下で評価されます。
</p>
<h4 id="使用法"> 使用法 </h4>
<p>evalInSandbox を使用するには、まず <code>Components.utils.Sandbox</code> というコンストラクタを用いてサンドボックスオブジェクトを作成する必要があります。サンドボックスは主要な URI で初期化しなければなりません。この URI は同一生成元 (same origin) セキュリティチェックに使用されます。例えば、<code><span>http://www.example.com/</span></code> という URI を渡すと、このサンドボックスを用いて評価されるコードは <span>http://www.example.com</span> からのデータにアクセスできるようになります。ウェブページの JavaScript から <code><a href="ja/DOM/document.domain">document.domain</a></code> をセットして同一生成元セキュリティチェックを変更することができるため、DOM window オブジェクトをサンドボックスのコンストラクタに渡してしまうこともできます。
</p>
<pre>// 主要な URI を渡してサンドボックスを作成
var s = Components.utils.Sandbox("http://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);
</pre>
<div class="noinclude">
</div>
|