ActionScript からの HTML DOM オブジェクトおよび JavaScript オブジェクトへのアクセスAdobe AIR 1.0 およびそれ以降 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;
|
|