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;