javascript-当用户关闭浏览器时执行Flex清理功能

我有一个Flex客户端应用程序.当用户关闭浏览器时,我需要一个清理功能才能在Flex中运行.我在网上找到了以下解决方案,但对我来说只有一半.我该如何解决?预先感谢您的任何回复!

病征

 
   >已触发CustomEvent,但未执行. >> CustomEvent.SEND_EVENTS的EventHandler由Mate EventMap定义.处理程序所做的只是调用HTTPServiceInvoker.在调试控制台中,我能够看到处理程序和HTTPServiceInvoker被触发,但是resultHandlers和faultHandlers都没有被调用.我知道此事件处理程序没有问题,因为当我在按钮单击处理程序中调度相同的CustomEvent.SEND_EVENTS时,它的行为与我预期的完全一样)
   >浏览器似乎在关闭清理功能之前等待它完成. (所有痕迹在浏览器关闭之前都已打印)

我将以下内容添加到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

解决方法:

不幸的是,没有可靠的方法来执行异步执行的清理功能.返回cleanUp方法后,HTTPService的结果/故障事件将异步发生.浏览器仅等到onbeforeunload函数(js clean_up函数)返回.除非您从该函数调用event.preventDefault(),否则该页面将关闭.请注意,调用preventDefault()会导致确定/取消弹出窗口询问:

Are you sure you want to navigate away from this page?

Press OK to continue, or Cancel to stay on the current page.

如果用户选择“确定”,浏览器将仍然关闭.您可以使用event.returnValue属性将自定义消息添加到弹出窗口.

//tested only in Firefox
window.addEventListener("beforeunload", onUnload, false);
function onUnload(e)
{
   e.returnValue = "Some text that you want inserted between " +
     "'Are you sure' and 'Press OK' lines";
   e.preventDefault();
}
上一篇:Linux系统下vi编辑器的一些简单使用操作


下一篇:ubuntu-mate-20.04-desktop安装总结