Adobe AIR 提供了HTMLLoader,用以在AIR应用里嵌入html页面,虽然对标准的支持和性能都不如真正的浏览器强(此处无视本人认为不是浏览器的IE),但还是可以做很多有意思的应用,不过呢这个东东有个好郁闷的问题,它无法处理html里需要打开新窗口的链接(target=’_blank’),如果HTMLLoader的navigateInSystemBrowser属性设置了为false,点击这类链接就会完全没有反应 >____<
咁点算呢,好彩万事都有work around,网上有人说,可以在页面加载完成之后,遍历里面所有target为_blank的a标签,给它们加个onclick函数,来处理它们的点击打开操作,这个方法对简单的页面没有问题,但系对于动态生成的a标签,或者页面里嵌入的iframe里面的a标签,就无能为力了,这个问题在js层面上去解决还是很局限的
Google不负有心人,终于搜出一个比较似样的解决方法,原文见这里,这位仁兄继承了HTMLHost类,修改了其对打开新窗口链接的默认处理,终于使得_blank们重见天日,大概原理如下:
首先我们要写个HTMLHost的子类:
1: package com.oscartong
2: {
3: import flash.html.HTMLHost;
4: import flash.html.HTMLWindowCreateOptions;
5: import flash.html.HTMLLoader;
6:
7: public class MyHTMLHost extends HTMLHost{
8: public function MyHTMLHost(defaultBehaviors:Boolean = true){
9: super(defaultBehaviors);
10: }
11: override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader{
12: var ldr:HTMLLoader = super.createWindow(windowCreateOptions);
13: ldr.addEventListener(Event.LOCATION_CHANGE, function(e:Event):void{
14: trace('open window, url=' + ldr.location);
15: });
16: return ldr;
17: }
18: }
19: }
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
But为什么要监听LOCATION_CHANGE事件呢上面的ldr?因为ldr创建出来之后,它的location还只是’about : blank’,还不是a标签上的href,所以要在其location发生变化之后才去读取
然后的做法的很简单啦,设置一下htmlLoader.htmlHost = new MyHTMLHost()就OK了,have fun ![]()
One Comment
thanks for your sharing.
But when i use it in my software,there is a error.
======================
TypeError: Error #1009: Cannot access a property or method of a null object reference.
======================
Do u have any idea about it?