HTMLLoader クラスについて

Adobe AIR 1.0 およびそれ以降

Adobe AIR の HTMLLoader クラスは、AIR アプリケーション内で HTML コンテンツを表示できる表示オブジェクトを定義します。SWF ベースのアプリケーションでは、HTMLLoader コントロールを既存のウィンドウに追加したり、 HTMLLoader.createRootWindow() を使用して、自動的に HTMLLoader オブジェクトを取り込む HTML ウィンドウを作成したりできます。HTMLLoader オブジェクトには、読み込まれた HTML ページ内から JavaScript の window.htmlLoader プロパティを通じてアクセスできます。

URL からの HTML コンテンツの読み込み

次のコードは、URL を HTMLLoader オブジェクトに読み込みます(HTMLLoader をステージまたは他の表示オブジェクトコンテナの子として追加し、アプリケーション内で HTML コンテンツを表示します)。

import flash.html.HTMLLoader; 
 
var html:HTMLLoader = new HTMLLoader; 
html.width = 400; 
html.height = 600; 
var urlReq:URLRequest = new URLRequest("http://www.adobe.com/"); 
html.load(urlReq);

HTMLLoader オブジェクトの width プロパティおよび height プロパティはいずれもデフォルトで 0 に設定されます。HTMLLoader オブジェクトをステージに追加するときに、大きさの設定が必要となる場合があります。HTMLLoader は、ページが読み込まれるときにいくつかのイベントを送出します。このイベントを使用すると、読み込まれたページと安全に通信するタイミングを確認できます。このイベントについて詳しくは、 AIR における HTML 関連イベントの処理 を参照してください。

注意: Flex フレームワークでは、UIComponent クラスを拡張するクラスのみが Flex Container コンポーネントの子として追加できます。そのため、HTMLLoader を直接 Flex Container コンポーネントの子として追加することはできませんが、Flex mx:HTML コントロールを使用して UIComponent を拡張するカスタムクラスを作成し、HTMLLoader を UIComponent の子として組み込むことができます。または、HTMLLoader を UIComponent の子として追加し、UIComponent を Flex Container に追加することができます。

TextField クラスを使用して HTML テキストをレンダリングすることもできますが、機能に制限があります。Adobe® Flash® Player の TextField クラスは、HTML マークアップのサブセットをサポートしています。ただし、サイズに制限があるので機能が制限されます(Adobe AIR に含まれる HTMLLoader クラスは、Flash Player では使用できません)。

ストリングからの HTML コンテンツの読み込み

HTMLLoader オブジェクトの loadString() メソッドは、HTML コンテンツのストリングを HTMLLoader オブジェクトに読み込みます。

var html:HTMLLoader = new HTMLLoader(); 
var htmlStr:String = "<html><body>Hello <b>world</b>.</body></html>"; 
html.loadString(htmlStr);

デフォルトでは、 loadString() メソッドを介して読み込まれたコンテンツは、次の特性を持つ非アプリケーションサンドボックスに配置されます。

  • (ファイルシステムからではなく)ネットワークからコンテンツを読み込むためのアクセス権を持つ

  • XMLHttpRequest を使用してデータを読み込むことができない

  • window.location プロパティが "about:blank" に設定されている

  • (非アプリケーションサンドボックス内のコンテンツがアクセスできるように)コンテンツは window.runtime プロパティにアクセスできない

AIR 1.5 では、HTMLLoader クラスには placeLoadStringContentInApplicationSandbox プロパティが含まれています。このプロパティが HTMLLoader オブジェクトに対して true に設定されている場合、 loadString() メソッドを介して読み込まれたコンテンツはアプリケーションサンドボックスに配置されます(デフォルト値は false です)。これにより、 loadString() メソッドを介して読み込まれたコンテンツは、 window.runtime プロパティおよびすべての AIR API にアクセスできます。このプロパティを true に設定する場合は、 loadString() メソッドの呼び出しで使用されるストリングのデータソースが信頼できることを確認してください。このプロパティが true に設定されている場合、HTML ストリング内のコードステートメントは完全なアプリケーション権限で実行されます。ストリングに有害なコードが含まれていないと確信できる場合のみ、このプロパティを true に設定します。

AIR 1.0 または AIR 1.1 SDK でコンパイルされたアプリケーションでは、 loadString() メソッドを介して読み込まれたコンテンツはアプリケーションサンドボックスに配置されます。

AIR アプリケーションでの HTML 使用時の重要なセキュリティ規則

AIR アプリケーションと共にインストールするファイルから、AIR API にアクセスできます。セキュリティ上の理由で、他のソースのコンテンツからはアクセスできません。例えば、この制限により、リモートドメイン(http://example.com など)のコンテンツからユーザーのデスクトップディレクトリを読み込むこと(またはさらに悪い状況)はできません。

eval() 関数(および関連する API)を呼び出すことによって攻撃される可能性があるセキュリティの抜け穴があるので、アプリケーションと共にインストールされるコンテンツは、これらのメソッドの使用がデフォルトで制限されています。しかし、一部の Ajax フレームワークは、 eval() 関数および関連する API の呼び出しを使用します。

AIR アプリケーションで動作するコンテンツを適切に構成するには、異なるソース別のコンテンツに対するセキュリティ制限の規則を考慮する必要があります。異なるソースのコンテンツは、サンドボックスと呼ばれる個別のセキュリティ区分に配置されます( セキュリティサンドボックス を参照)。デフォルトで、アプリケーションと共にインストールされるコンテンツは、 アプリケーション サンドボックスというサンドボックスにインストールされ、AIR API へのアクセス権が付与されます。アプリケーションサンドボックスは、信頼できないコードの実行を防止するよう設計された制限があり、一般に最も安全性の高いサンドボックスです。

ランタイムでは、アプリケーションと共にインストールされたコンテンツをアプリケーションサンドボックス以外のサンドボックスに読み込むことができます。非アプリケーションサンドボックス内のコンテンツは、一般的な Web ブラウザーのコンテンツと同様のセキュリティ環境で動作します。例えば、非アプリケーションサンドボックス内のコードは、 eval() メソッドおよび関連するメソッドを使用できます(ただし、同時に AIR API にアクセスすることはできません)。ランタイムには、(AIR API を例えば非アプリケーションコンテンツに公開せずに)異なるサンドボックス内のコンテンツが安全に通信できる方法が備えられています。詳しくは、 異なるセキュリティサンドボックス内のコンテンツのクロススクリプト を参照してください。

サンドボックスで使用が制限されているコードを呼び出すと、セキュリティ上の理由から、ランタイムは JavaScript エラー「Adobe AIR security violation for JavaScript code in the application security sandbox.」を送出します。

このエラーを回避するには、次節、 セキュリティ関連の JavaScript エラーの回避 で説明するコーディングの手法を参照してください。

詳しくは、 Adobe AIR の HTML セキュリティ を参照してください。