Adobe AIR プログラミング講座

 

HTMLLoader クラスについて

 
 


■HTMLLoader クラスについて

 
■ HTML のレンダリング表示が可能
 
HTMLLoader クラスを使うと、HTMLファイルを読み込んでレンダリングを行い表示することができます
 
Safari や GoogleChrome 等のブラウザで採用されている WebKit エンジンでレンダリングが行われます。
 
HTML がレンダリングされるだけでなくブラウザのように動作します
 
リンク先をクリックすると、新たなページが読み込まれ、レンダリング表示が更新されます。
 
 
 
■ JavaScript の実行が可能
 
JavaScript の実行も可能です。
 
「ActionScript」から「JavaScript のプロパティやメソッド」に、直接アクセスすることもできます。
 
■ PDFファイルの表示が可能
 
PDFファイルを表示する事もできます。
 
ただし AIR アプリを動作させているパソコン上に Adobe Reader 8.1 以降がインストールされている必要があります。
 
 
■ HTMLLoader クラスの派生について
 
HTMLLoader は、以下のクラスから派生しています。
 
ここで解説してない分はリンク先に解説がありますので合わせてご覧下さい。
 
DisplayObject クラスを継承しているので、スプライトのように制御する事ができます
 
Object
↓派生
EventDispatcher
↓派生
DisplayObject
↓派生
InteractiveObject
↓派生
DisplayObjectContainer
↓派生
Sprite
↓派生
HTMLLoader
 
■モバイル用の StageWebView クラスについて
 
モバイル用の低機能な、StageWebView クラスもあります。
 
 


■HTMLLoader の機能が利用可能か調べる


HTMLLoader の機能が利用可能か調べるには、HTMLLoader.isSupported プロパティを使用します。
 
true であれば、サポートしています。
 
この確認用のプロパティは、Adobe AIR 2.0 以降で利用可能です。
 
モバイルなどの環境で動作させる場合、HTMLLoader の機能をサポートしていない事があります。
 
HTMLLoader が利用可能か調べる

import flash.html.HTMLLoader;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "HTMLLoader が利用可能:" + HTMLLoader.isSupported;
 
 


■HTMLLoader クラスをインスタンス化する


new 演算子を使って、HTMLLoader クラスをインスタンス化します。
 
HTMLLoader オブジェクトを作成する

import flash.html.HTMLLoader;

// HTMLLoaderオブジェクトを作成
var html_loader : HTMLLoader = new HTMLLoader();
 

■表示リストに登録する


addChild() メソッドを使って表示リストに登録します。
 
デフォルトでは幅と高さが設定されていないので、このままでは閲覧できません。
 
width プロパティと height プロパティを変更して幅と高さを設定します。
 
ローダーオブジェクトを作成する

import flash.html.HTMLLoader;

// HTMLLoaderオブジェクトを作成
var html_loader : HTMLLoader = new HTMLLoader();

// 表示リストに登録
stage.addChild(html_loader);

// 幅を設定
html_loader.width = 400;
// 高さを設定
html_loader.height = 300;
 

■幅と高さの制限について

 
■Adobe AIR 1.5 以前の場合
 
幅と高さの上限は、2880 ピクセルです。それより大きいサイズを指定するとエラーとなります。
 
■Adobe AIR 2.0 以降の場合
 
幅と高さの上限は、4096 ピクセルです。それより大きいサイズを指定するとエラーとなります。
 


 

HTML コンテンツを表示する

 
 


■URL を指定して、レンダリング表示する


HTML 文書の読み込みを開始するには、load() メソッドを使用します。
 
引数に、URL を、URLRequest 型で指定します。
 
すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し、新しく読み込みを開始します。
 
HTMLLoader.load ( URLRequest型 ) :void
第01引数 URLRequestURL をURLRequest型で指定します。
戻り値 voidなし
 
HTMLファイルの読み込みを開始する

import flash.html.HTMLLoader;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

// URL 文字列から URLRequest オブジェクトを作成
var url : URLRequest = new URLRequest("http://hakuhin.jp/index.html");

// 読み込みを開始する
html_loader.load(url);
 

■ HTML 文字列を使用して、直接レンダリング表示する


HTML文字列を使って、直接レンダリング表示するには、loadString() メソッドを使用します。
 
引数に、HTML 形式の文字列を指定します。
 
HTMLLoader.loadString ( String ) :void
第01引数 StringHTML 形式の文字列を指定
戻り値 voidなし
 
HTML文字列からレンダリング表示する

import flash.html.HTMLLoader;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

// HTML 文字列を用意
var html_text : String = "<HTML><BODY><B>HELLO WORLD!!</B></BODY></HTML>";

// HTML 文字列を使ってレンダリング表示する
html_loader.loadString(html_text);
 

■読み込みを中止する


読み込みを中止するには、cancelLoad() メソッドを使用します。
 
HTMLファイルの読み込みを中止する

import flash.html.HTMLLoader;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// ファイルの読み込みを中止する
		html_loader.cancelLoad();
		break;
	}
	step ++;
});
 


 

PDFファイルを読み込んで表示する

 


■インストールされている Adobe Reader のバージョンを調べる


PDFファイルを読み込んでレンダリング表示する為には、AIR アプリを動作させているパソコン上に Adobe Reader 8.1 以降がインストールされている必要があります。
 
PDF ファイルが表示可能か調べるには、HTMLLoader.pdfCapability プロパティを使用します。
 
中身は HTMLPDFCapability.* 定数です。下に一覧表があります。
 
定数数値説明
HTMLPDFCapability.STATUS_OK0PDFファイルを読み込む事が可能
HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND3201Adobe Readerが検出できない
HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD3202Adobe Readerのバージョンが古い
HTMLPDFCapability.ERROR_PREFERED_READER_TOO_OLD3203Adobe Readerのバージョンは対応しているが、PDFのコンテンツを扱うように設定されている Adobe Reader のバージョンが古い
 
Adobe Reader のキャパシティを調べる

import flash.html.HTMLLoader;
import flash.text.TextField;

// テキストフィールドを作成
var text_field:TextField = new TextField();
text_field.x = 10;
text_field.y = 10;
text_field.width = stage.stageWidth - 20;
text_field.height = 20;
text_field.border = true;
stage.addChild(text_field);

text_field.text = "PDF キャパシティ:" + HTMLLoader.pdfCapability;
 

■Adobe Reader の読み込みが可能か調べる

 
HTMLLoader.pdfCapability プロパティが、HTMLPDFCapability.STATUS_OK と等しい場合、「Adobe Reader の読み込みが可能」である事が分かります。
 
PDFファイルを読み込めるか調べる

import flash.html.HTMLLoader;
import flash.html.HTMLPDFCapability;

if(HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK){
	trace("PDFファイルの読み込みが可能");
}
 

■読み込みを開始する


PDFファイルの読み込みを開始するには、load() メソッドを使用します。
 
引数に、PDFファイルまでの相対パスか URL を URLRequest 型で指定します。
 
すでに読み込み中にもかかわらずこのメソッドを呼び出した場合は、以前の読み込み処理が終了し新しく読み込みを開始します。
 
HTMLLoader.load ( URLRequest型 ) :void
第01引数 URLRequestファイルまでの相対パスか URL をURLRequest型で指定します。
戻り値 voidなし
 
PDFファイルの読み込みを開始する

import flash.html.HTMLLoader;
import flash.html.HTMLPDFCapability;
import flash.net.URLRequest;

// PDFファイルの読み込みが可能
if(HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK){

	// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
	var html_loader : HTMLLoader = new HTMLLoader();
	stage.addChild(html_loader);
	html_loader.width = stage.stageWidth;
	html_loader.height = stage.stageHeight;

	var url : URLRequest = new URLRequest("http://hakuhin.jp/test.pdf");
	html_loader.load(url);

}
 

■Adobe Reader の表示の注意点

 
HTMLLoader に設定した、回転や拡大の要素は無視されます
 


 

読み込み履歴について

 
 


■1つ前のページに戻る


1つ前のページに戻りたい場合は、historyBack() メソッドを使用します。
 
1つ前のページに戻る

import flash.html.HTMLLoader;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	case 2:
		// 1つ前のページに戻る
		html_loader.historyBack();
		break;
	}
	step ++;
});
 

■1つ次のページに進める


1つ次のページに進めたい場合は、historyForward() メソッドを使用します。
 
1つ次のページに進める

import flash.html.HTMLLoader;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	case 2:
		// 1つ前のページに戻る
		html_loader.historyBack();
		break;
	case 3:
		// 1つ次のページに進める
		html_loader.historyForward();
		break;
	}
	step ++;
});
 



■ステップ数を指定して履歴を移動する


ステップ数を指定して履歴を移動するには、historyGo() メソッドを使用します。
 
引数にステップ数を指定します。
 
マイナス値で履歴を戻します。プラス値で履歴を進めます。
 
ステップ数を指定して履歴を移動する

import flash.html.HTMLLoader;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	case 2:
		// ステップ数を指定して履歴を移動する(ここでは1つ前に戻る)
		html_loader.historyGo(-1);
		break;
	case 3:
		// ステップ数を指定して履歴を移動する(ここでは1つ次へ進む)
		html_loader.historyGo(1);
		break;
	}
	step ++;
});
 

■現在の履歴番号と総履歴数を取得する


現在表示している履歴番号を取得するには、historyPosition プロパティを使用します。(0 番目から開始)
 
総履歴数を取得するには、historyLength プロパティを使用します。
 
現在の履歴番号と総履歴数を取得する

import flash.html.HTMLLoader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	case 2:
		// ステップ数を指定して履歴を移動する(ここでは1つ前に戻る)
		html_loader.historyGo(-1);
		break;
	case 3:
		// ステップ数を指定して履歴を移動する(ここでは1つ次へ進む)
		html_loader.historyGo(1);
		break;
	}
	step ++;
});

// 読み込み完了時に呼び出されるイベント
html_loader.addEventListener(Event.COMPLETE , function (e:Event):void{

	// 現在表示している履歴番号
	var pos:uint = html_loader.historyPosition;
	// 総履歴数
	var num:uint = html_loader.historyLength;

	trace(pos + "/" + num);
});
 



■番号を指定して履歴情報を取得する


番号から履歴情報を取得するには、getHistoryAt() メソッドを使用します。
 
引数に履歴番号を指定します。
 
戻り値から HTMLHistoryItem オブジェクトが得られます。
 
履歴番号から HTMLHistoryItem オブジェクトを取得する

import flash.html.HTMLLoader;
import flash.html.HTMLHistoryItem;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	case 2:
		// 履歴番号から HTMLHistoryItem オブジェクトを取得
		var history_item : HTMLHistoryItem = html_loader.getHistoryAt(0);
		break;
	}
	step ++;
});
 

■HTMLHistoryItem クラスのプロパティについて


HTMLHistoryItem クラスが持つ、読み取り専用のプロパティの一覧です。
 
プロパティ名 説明
isPost Boolean POSTデータを含むかどうか(読み取り専用)
originalUrl String リダイレクト前のURL(読み取り専用)
url String 実際に表示されるURL(読み取り専用)
title String タイトル名(読み取り専用)
 
履歴情報を取得する

import flash.html.HTMLLoader;
import flash.html.HTMLHistoryItem;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// 履歴番号から HTMLHistoryItem オブジェクトを取得
		var history_item : HTMLHistoryItem = html_loader.getHistoryAt(0);

		trace("POSTデータが含まれるか? : " + history_item.isPost);
		trace("リダイレクト前 URL : " + history_item.originalUrl);
		trace("URL : " + history_item.url);
		trace("タイトル名 : " + history_item.title);

		break;
	}
	step ++;
});
 


 

HTMLLoader のイベントについて

 
 


■読み込みが完了したか調べる


読み込みが完了したか調べるには、Event.COMPLETE イベントを使用します。
 
このイベントは、サイトの構成によっては呼び出されない事があります。
 
読み込みが完了したか調べる

import flash.html.HTMLLoader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	}
	step ++;
});

// 読み込み完了時に呼び出されるイベント
html_loader.addEventListener(Event.COMPLETE , function (e:Event):void{
	trace("読み込みが完了した");
});
 

■URL が更新されたか調べる


URL が更新され最新の状態であるか調べるには、Event.LOCATION_CHANGE イベントを使用します。
 
URL が更新されたか調べる

import flash.html.HTMLLoader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	}
	step ++;
});

// URL 更新時に呼び出されるイベント
html_loader.addEventListener(Event.LOCATION_CHANGE , function (e:Event):void{
	trace("URL が更新された" + html_loader.location);
});
 

■レンダリングが更新されたか調べる


レンダリングが更新され最新の状態であるか調べるには、Event.HTML_RENDER イベントを使用します。
 
レンダリング更新されたか調べる

import flash.html.HTMLLoader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	}
	step ++;
});

// レンダリング更新時に呼び出されるイベント
html_loader.addEventListener(Event.HTML_RENDER , function (e:Event):void{
	trace("レンダリングが更新され最新の状態");
});
 

■スクロールが更新されたか調べる


スクロールが更新されたか調べるには、Event.SCROLL イベントを使用します。
 
横方向のスクロール位置を変更するには scrollH プロパティ
 
縦方向のスクロール位置を変更するには scrollV プロパティ
 
を変更します。
 
スクロールが更新されたか調べる

import flash.html.HTMLLoader;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	}
	step ++;
});

// スクロール更新時に呼び出されるイベント
html_loader.addEventListener(Event.SCROLL , function (e:Event):void{
	trace("スクロールが更新された");
	trace("横 : " + html_loader.scrollH);
	trace("縦 : " + html_loader.scrollV);
});
 

■JavaScript の例外処理が発生したか調べる


JavaScript の例外処理が発生したか調べるには、HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION イベントを使用します。
 
JavaScript の例外処理が発生したか調べる

import flash.html.HTMLLoader;
import flash.events.HTMLUncaughtScriptExceptionEvent;
import flash.events.MouseEvent;
import flash.net.URLRequest;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

var step:int = 0;

// クリック時に実行されるイベント
html_loader.addEventListener(MouseEvent.CLICK , function (e:MouseEvent):void{
	switch(step){
	case 0:
		// "http://google.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://google.com"));
		break;
	case 1:
		// "http://yahoo.com" の読み込みを開始する
		html_loader.load(new URLRequest("http://yahoo.com"));
		break;
	}
	step ++;
});

// JavaScript の例外処理が発生した時に呼び出されるイベント
html_loader.addEventListener(HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION , function (e:HTMLUncaughtScriptExceptionEvent):void{
	trace("JavaScript の例外処理が発生した");
});
 


 

HTMLLoader から JavaScript にアクセスする

 


■HTMLLoader から JavaScript の Window オブジェクトを取得する


JavaScript の 「Window オブジェクト」を取得するには、window プロパティを使用します。
 
JavaScript の window オブジェクトを取得する

import flash.html.HTMLLoader;
import flash.events.Event;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

// 読み込み完了時に呼び出されるイベント
html_loader.addEventListener(Event.COMPLETE , function (e:Event):void{
	
	// JavaScript の window オブジェクトを取得
	var window:Object = html_loader.window;

});

// 空のページを作成
html_loader.loadString("");
 

■HTMLLoader から JavaScript にアクセスする


得られたオブジェクトから、JavaScript と同じ名称のプロパティとメソッドにアクセスする事ができます。
 
JavaScript については、こちらのページで解説しています。
 
JavaScript のドキュメントオブジェクトモデル(DOM) についてはこちらのページで解説しています。
 
DOM API を呼び出して、HTML に動的にボタンを追加する例です。
 
JavaScript の window オブジェクトから DOM API にアクセスして、動的にボタンを追加する

import flash.html.HTMLLoader;
import flash.events.Event;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

// 読み込み完了時に呼び出されるイベント
html_loader.addEventListener(Event.COMPLETE , function (e:Event):void{
	
	// JavaScript の window オブジェクトを取得
	var window:Object = html_loader.window;
	// JavaScript の document オブジェクトを取得
	var document:Object = window.document;

	// 「INPUT エレメント」を作成する
	var element:Object = document.createElement("input");
	element.type = "button";	// タイプをボタンに設定
	element.value = "Click !!";	// 値
	
	// クリックされた時に実行されるイベントハンドラ
	element.onclick = function ():void {
		window.alert("ボタンが押された!!");
	};

	// BODY の最後尾に登録する
	document.body.appendChild(element);

});

// 空のページを作成
html_loader.loadString("");
 


 

HTMLLoader から HTML用 AIR API を呼び出す

 


■「HTML開発者用 AIR API」を呼び出す


HTMLLoader 内の JavaScript を使用して「HTML開発者用 AIR API」を呼び出します。
 
window.runtime.* からアクセスします。
 
詳しくは HTML 開発者用 AIR APIの公式リファレンスが参考になります。
 
HTML 開発者用 AdobeR AIR API リファレンスガイド
 
http://help.adobe.com/ja_JP/air/reference/html/
 

■Adobe AIR 1.1 以前の場合

 
AIR 1.1 以前の使用例です。
 
HTML用 AIR API のtrace() 関数を呼び出す(AIR 1.1以前)

import flash.html.HTMLLoader;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

// HTML 文字列を用意
var str : String = "" +
"<HTML>" +
"	<HEAD>" +
"	<script>" +
"		function func(){" +
"			window.runtime.trace(\"Hallo World !!\");" +
"		}" +
"	</script>" +
"	</HEAD>" +
"<body>" +
"	<input type=\"button\" value=\"click!!\" onClick=\"func()\"}>" +
"</body>" +
"</html>";

// HTML文字列を使ってレンダリング表示
html_loader.loadString(str);
 

■Adobe AIR 1.5 以降で必要な設定


AIR 1.1 以前では、「HTML用 AIR API」をそのまま実行可能ですが、
 
AIR 1.5 以降では、loadString() メソッドで生成したコンテンツに、アプリケーションサンドボックスの制限があり、実行を試みるとエラーとなります。
 
制限を外すには、placeLoadStringContentInApplicationSandbox プロパティを true に変更します。
 
他人に悪意あるコードが実行される可能性が生じるので注意します。
 
AIR 1.5 以降の例です。
 
HTML用 AIR API のtrace() 関数を呼び出す(AIR 1.5以降)

import flash.html.HTMLLoader;

// HTMLLoaderオブジェクトを作成して、ステージ全体に配置する
var html_loader : HTMLLoader = new HTMLLoader();
stage.addChild(html_loader);
html_loader.width = stage.stageWidth;
html_loader.height = stage.stageHeight;

// アプリケーションサンドボックスの制限を外す
html_loader.placeLoadStringContentInApplicationSandbox = true;

// HTML 文字列を用意
var str : String = "" +
"<HTML>" +
"	<HEAD>" +
"	<script>" +
"		function func(){" +
"			window.runtime.trace(\"Hallo World !!\");" +
"		}" +
"	</script>" +
"	</HEAD>" +
"<body>" +
"	<input type=\"button\" value=\"click!!\" onClick=\"func()\"}>" +
"</body>" +
"</html>";

// HTML文字列を使ってレンダリング表示
html_loader.loadString(str);