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();
}
标签:httpservice,mate,flex,actionscript-3,javascript 来源: https://codeday.me/bug/20191107/2002499.html