HTMLLoader オブジェクトが
complete
イベントを送出すると、ページの HTML DOM(ドキュメントオブジェクトモデル)内のすべてのオブジェクトにアクセスできます。アクセス可能なオブジェクトには、表示エレメント(ページの
div
オブジェクトおよび
p
オブジェクトなど)および JavaScript の変数と関数があります。
complete
イベントは、JavaScript ページの
load
イベントに対応します。
complete
イベントが送出されるまでは、DOM エレメント、変数および関数は解析または作成されていない可能性があります。可能であれば、
complete
イベントを待ってから HTML DOM にアクセスします。
例えば、次のような HTML ページがあるとします。
<html>
<script>
foo = 333;
function test() {
return "OK.";
}
</script>
<body>
<p id="p1">Hi.</p>
</body>
</html>
この簡単な HTML ページは、
foo
という名前の JavaScript 変数と
test()
という名前の JavaScript 関数を定義しています。2 つとも、ページのグローバル
window
オブジェクトのプロパティです。また、
window.document
オブジェクトには、名前付きの P エレメント(ID は
p1
)が含まれ、
getElementById()
メソッドを使用してアクセスできます。ページが読み込まれる(HTMLLoader オブジェクトが
complete
イベントを送出する)と、次に示す ActionScript コードで、ActionScript から各オブジェクトにアクセスできます。
var html:HTMLLoader = new HTMLLoader();
html.width = 300;
html.height = 300;
html.addEventListener(Event.COMPLETE, completeHandler);
var xhtml:XML =
<html>
<script>
foo = 333;
function test() {
return "OK.";
}
</script>
<body>
<p id="p1">Hi.</p>
</body>
</html>;
html.loadString(xhtml.toString());
function completeHandler(e:Event):void {
trace(html.window.foo); // 333
trace(html.window.document.getElementById("p1").innerHTML); // Hi.
trace(html.window.test()); // OK.
}
HTML エレメントのコンテンツにアクセスするには、
innerHTML
プロパティを使用します。例えば、前のコードでは
html.window.document.getElementById("p1").innerHTML
を使用して、
p1
という名前の HTML エレメントのコンテンツを取得しています。
ActionScript から HTML ページのプロパティを設定することもできます。例えば、次の例では、ページ上の
p1
エレメントのコンテンツと
foo
JavaScript 変数の値を、包含する HTMLLoader オブジェクトへの参照を使用して設定しています。
html.window.document.getElementById("p1").innerHTML = "Goodbye";
html.window.foo = 66;