我有一个Flex客户端应用程序。当用户关闭浏览器时,我需要一个清理函数在Flex中运行。我在网上找到了以下解决方案,但它只对我起到了一半的作用。我该如何修复它呢?提前感谢任何回复!
症状
CustomEvent
被触发,但未执行。
>>CustomEvent.SEND_EVENTS
的事件处理程序由Mate EventMap定义。所有处理程序只是调用一个HTTPServiceInvoker
。在调试控制台中,我能够看到处理程序和HTTPServiceInvoker被触发,但既没有调用resultHandlers
也没有调用faultHandlers
。我知道这个事件处理程序没有问题,因为当我在按钮单击处理程序中分派相同的CustomEvent.SEND_EVENTS
时,它的行为与我预期的完全相同)- 浏览器似乎在关闭之前等待cleanUp函数完成。(所有跟踪都在浏览器关闭之前打印出来了)
代码
我将以下内容添加到index.template.html中:
window.onbeforeunload = clean_up;
function clean_up()
{
var flex = document.${application} || window.${application};
flex.cleanUp();
}
在应用程序的MXML文件中使用以下内容:
import flash.external.ExternalInterface;
public function init():void {
ExternalInterface.addCallback("cleanUp",cleanUp);
}
public function cleanUp():void {
var newEvent:CustomEvent = new CustomEvent(CustomEvent.SEND_EVENTS);
newEvent.requestObj = myFormModel;
dispatchEvent(newEvent);
// for testing purposes
// to see whether the browser waits for Flex cleanup to finish before closing down
var i:int;
for (i=0; i<10000; i++){
trace(i);
}
}
我的设置
- FlexBuilder 3
- Mate MVC框架(Mate_08_9.swc)
- FlashPlayer 10