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; |
|