在子swf發送事件並在主swf偵聽:
caller.swf
ldr.contentLoaderInfo.sharedEvents.addEventListener('自定義事件', handler);
becaller.swf
this.loaderInfo.sharedEvents.dispatchEvent(new Event('自定義事件'));
同理:
在主swf發送事件並在子swf偵聽:
caller.swf
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, function() { ldr.contentLoaderInfo.sharedEvents.dispatchEvent(new Event('自定義事件'));
});
becaller.swf
this.loaderInfo.sharedEvents.addEventListener('自定義事件', handler);
這邊要注意如果子swf還沒讀取完就發送事件事沒有用的。
結論就是,一切的事件相互溝通的行為都要透過sharedEvents
還有一個很不錯的用法:
可以用ValueObject夾帶物件經由事件互相傳送。
02/09/2010補記
子swf內不能對stage做更動,例如
stage.scaleMode = StageScaleMode.NO_SCALE;
否則子swf被讀入的時候會產生
TypeError: Error #1009: 無法存取 Null 物件參考的屬性或方法。
參考:
無寶落鳳 - AS3 與加載的子 SWF 共享事件 sharedEvents
Ticore's Blog - 利用 SharedEvents 作部分 Cross-Domain Scripting
9RIA.com天地會 - 關於loaderinfo與contentloaderinfo
Adobe® Flex™ 3.2 語言參考 - LoaderInfo
沒有留言:
張貼留言