2013-07-17

AIR 3.8 for iOS 載入外部 SWF

依據官方說明文件 Loader.load() 「在 iOS 上,您無法載入包含任何 ActionScript ByteCode (ABC) 的 SWF 檔案」,但這是舊版的說明。

AIR 3.6 for iOS 較早版本可以載入 SWC,3.7... 3.8... 為了求真相,以下直接用 AIR 3.8.0.820 for iOS, iPhone 實機,MC Graphics API 做測試。

1) 把 SWF 一同打包到 ipa 裡時 (相同 Application domain),使用文件上的
var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
loader.load( new URLRequest('app:/easy_draw.swf'), loaderContext );
SWF 裡的 AS 可以正常執行 (所有東西不用再包成一包 SWF 了, 泣...)

2) 載入 Application domain 以外的 SWF (放在網路上測試),動畫可以正常播放,裡面的 AS 不會 (不能) 執行。

3) 雖然 Application domain 以外的 SWF 裡不能執行 AS,有趣的是載入後 loader.content 是個 MovieClip,而且 MC 的所有屬性都可以用,可以使用 addEventListener() 去偵聽,也可以使用 mc.addFrameScript() 設定 frame actions。而且有命名的子物件,也可以控制。


AIR 到 3.8 (目前還是 beta) 已經可以載入外部的 SWF 並執行,只是因為安全性的問題,依然不讓非 Application domain 的 SWF 執行 AS。希望之後可以開放這個限制,而採用和 AIR for Android 的安全機制,讓我們拭目以待。

2 則留言:

Unknown 提到...

好久以前就支持这个功能了。

熱情的沙漠 提到...

HI你好 我也遇到一樣的問題..目前適用3.6版本發布在ios上面..Swf上面初始會下Stop的指令完全沒作用
然後在主檔上面下 某某SWF檔案._content.man_mc.gotoAndPlay(2);
某某SWC檔案.man_mc.gotoAndPlay(2);

也是完全沒作用..等等試試看你說的3.8不知道有問題是否可以互相討論一下

FB 留言