跨SWF安全沙箱引起的类型转换问题

问题描述:
今天做Denizen Hello,用的是Gaia框架,LoadingPage调用IndexPage中的MapPainter类型的对象出现如下错误:
TypeError: Error #1034: 强制转换类型失败:无法将 com.couldhll.bitmaptext::MapPainter@24f793a1 转换为 com.couldhll.bitmaptext.MapPainter。

问题分析:
检查LoadingPage和IndexPage中的类型,确认都是com.couldhll.bitmaptext.MapPainter类型。
但是IndexPage中是MapPainter@24f793a1类型,而LoadingPage中是MapPainter类型。
开始怀疑IndexPage中有问题,但是无果。偶尔在Main.as中使用MapPainter类型的对象后,一切正常。

问题解决:
其实我们都知道Loader.load()后面一个参数是安全命名空间参数,要设置成:SecurityDomain.currentDomain。
在Gaia中,可以在site.xml中为page设定domain="current"。
本例如下:
<?xml version="1.0" encoding="UTF-8"?>
<site title="Hello" menu="true">
    <page id="index" src="index.swf" domain="current" >
        <page id="nav" src="nav.swf" depth="top" domain="current" >
            <page id="loading" title="Loading" src="loading.swf" menu="true" domain="current" />
   <page id="home" title="Home" src="home.swf" menu="true" domain="current" />
        </page>
    </page>
</site>