从 ActionScript 访问 HTML DOM 和 JavaScript 对象

Adobe AIR 1.0 和更高版本

当 HTMLLoader 对象调度 complete 事件之后,即可访问页面的 HTML DOM(文档对象模型)中的所有对象。可访问的对象包括显示元素(例如页面中的 divp 对象)以及 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 函数。两者均为该页面的全局 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 页的属性。例如,下面的示例使用对包含 HTMLLoader 对象的引用来设置页面上 p1 元素的内容和 foo JavaScript 变量的值:

html.window.document.getElementById("p1").innerHTML = "Goodbye"; 
html.window.foo = 66;