23.12.添加HTML内容

23.12.1.问题
我想在应用程序中显示HTML内容。
23.12.2.解决办法
使用<mx:HTML>控件载入并显示HTML内容。
23.12.3.讨论
Adobe AIR 运行时支持在基于SWF的应用程序中渲染HTML。渲染引擎是基于WebKit技术构建,功能和基于WebKit引擎的浏览器一样。比如Safari。这个引擎的核心就是AIR HTML API中的flash.html.HTMLLoader类,它继承自flash.display.Sprite类,HTMLLoader对象可被添加到基于ActionScript和基于Flex的程序中。

该API中还包括<mx:HTML>控件,它可以轻松的将HTML内容显示到Flex框架的容器中。

mx.controls.HTML类内部的接口是HTMLLoader类实例并提供对HTML Document Object Model (DOM)的访问。这一能力类似于HTML页面中操作DOM和CSS的JavaScript。你可以无限制的载入远程服务器上HTML页面,也可以载入本地沙箱中的HTML页面甚至是HTML格式的字符串。

通过location属性值将HTML页面载入到<mx:HTML>控件,location字符串被传给内部的HTMLLoader实例,它才载入和渲染所需的页面。下面的例子载入web网页到<mx:HTML> 控件,还有些控件用于导航到其他页面:
+展开
-XML
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:Script>
<![CDATA[
[Bindable]
public var urlLocation:String = "http://www.adobe.com";

]]>
</mx:Script>
<mx:Form width="100%">
<mx:FormItem width="100%">
<mx:HBox width="100%">
<mx:TextInput id="urlFieldwidth="100%text="{html.location}"/>
<mx:Button label="goclick="{urlLocation = urlField.text}" />
</mx:HBox>
</mx:FormItem>
</mx:Form>
<mx:HTML id="htmlwidth="100%height="100%location="{urlLocation}" />
</mx:WindowedApplication>

这个应用程序从http://www.adobe.com 载入web 页面作为开始页并提供控件通过改变<mx:HTML>控件的location属性值导航到其他HTML页面。页面载入后,你可以跟用其他浏览器那样与HTML内容进行操作。HTMLLoader实例也是在内部对浏览历史进行管理,并提供一个简单的方式浏览历史记录。下面的例子添加控件用于向前或向后浏览历史记录:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical">
<mx:Script>
<![CDATA[
[Bindable]
public var urlLocation:String = "http://www.adobe.com" ;

]]>
</mx:Script>
<mx:Form width="100%">
<mx:FormItem width="100%">
<mx:HBox width="100%">
<mx:Button label="backclick="html.historyBack();" />
<mx:Button label="forwardclick="html.historyForward();"/>
<mx:TextInput id="urlFieldwidth="100%text="{html.location}"/>
<mx:Button label="goclick="{urlLocation = urlField.text}" />
</mx:HBox>
</mx:FormItem>
</mx:Form>
<mx:HTML id="htmlwidth="100%height="100%location="{urlLocation}" />
</mx:WindowedApplication>

HTML.historyBack和HTML.historyForward方法用于导航HTMLLoader对象中的历史记录。如果你熟悉Ajax应用程序的构建,那HTMLLoader类的历史记录管理非常类似于window.history JavaScript对象。除了这两个方法外,你还可以访问历史记录数多少,以及当前所处的位置,以及用historyGo方法直接载入指定的历史记录。从这个例子中不难发现,开发一个基于SWF的个性化Web浏览器是如此简单。

这里还有些HTMLLoader实例需要关注的事件,需要注意的是要搞清楚这些事件的发生顺序:
+展开
-XML
<mx:HTML id="htmlwidth="100%height="100%location="http://www.adobe.com"
htmlDOMInitialize="initHandler();locationChange="changeHandler();complete="completeHandler();htmlRender="renderHandler();" />

locationChange 事件是在内部HTMLLoader 实例的location 属性更新后触发的,htmlDOMInitialized事件是在文档被创建且你与HTML DOM交互之前触发的,complete事件触发后,你就可以操作HTML DOM了。而htmlRender是在渲染HTML内容时触发的。

加支付宝好友偷能量挖...


评论(0)网络
阅读(123)喜欢(0)flash/flex/fcs/AIR