Accessing HTML DOM and JavaScript objects from ActionScript
Once the HTMLLoader object dispatches the complete
event, you can access all
the objects in the HTML DOM (document object model) for the page. Accessible
objects include display elements (such as div
and p
objects in the page) as
well as JavaScript variables and functions. The complete
event corresponds to
the JavaScript page load
event. Before complete
is dispatched, DOM elements,
variables, and functions may not have been parsed or created. If possible, wait
for the complete
event before accessing the HTML DOM.
For example, consider the following HTML page:
<html>
<script>
foo = 333;
function test() {
return "OK.";
}
</script>
<body>
<p id="p1">Hi.</p>
</body>
</html>
This simple HTML page defines a JavaScript variable named foo and a JavaScript
function named test(). Both of these are properties of the global window
object of the page. Also, the window.document
object includes a named P
element (with the ID p1 ), which you can access using the getElementById()
method. Once the page is loaded (when the HTMLLoader object dispatches the
complete
event), you can access each of these objects from ActionScript, as
shown in the following ActionScript code:
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.
}
To access the content of an HTML element, use the innerHTML
property. For
example, the previous code uses
html.window.document.getElementById("p1").innerHTML
to get the contents of the
HTML element named p1.
You can also set properties of the HTML page from ActionScript. For example, the
following example sets the contents of the p1
element and the value of the
foo
JavaScript variable on the page using a reference to the containing
HTMLLoader object:
html.window.document.getElementById("p1").innerHTML = "Goodbye";
html.window.foo = 66;