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

标签 javascript apache-flex actionscript-3 httpservice mate

我有一个 Flex 客户端应用程序。当用户关闭浏览器时,我需要一个清理函数在 Flex 中运行。我在网上找到了以下解决方案,但它只对我有用。我该如何解决? 提前感谢您的任何回复!

症状

  • CustomEvent 触发,但未执行。
    >> CustomEvent.SEND_EVENTS 的事件处理程序由 Mate EventMap 定义。处理程序所做的只是调用 HTTPServiceInvoker。在调试控制台中,我能够看到处理程序和 HTTPServiceInvoker 被触发,但 resultHandlersfaultHandlers 都没有被调用。我知道这个事件处理程序没有问题,因为当我在按钮单击处理程序中发送相同的 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

最佳答案

不幸的是,没有可靠的方法来执行这种异步执行的清理功能。 HTTPService 的result/fault 事件在cleanUp 方法返回后异步发生。浏览器只会等待 onbeforeunload 函数(js clean_up 函数)返回。除非您从该函数调用 event.preventDefault(),否则该页面将关闭。请注意,调用 preventDefault() 将导致 ok/cancel 弹出窗口询问:

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 属性将自定义消息添加到 popop。

//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();
}

关于javascript - 当用户关闭浏览器时执行 Flex 清理功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647088/

相关文章:

javascript - 如何使用 IndexedDB objectStore 中的值自动填充选择框?

actionscript-3 - 在 Flex 4 中为自定义组件设置默认皮肤

javascript - 顶部栏正文位置太低的 html

apache-flex - AS3 : How to convert ascii code to character actionscript

apache-flex - 我们可以从多个 Flex 应用程序访问单个 SQLite 数据库吗?

apache-flex - 如何在 Flex 中获取有关用户浏览器的信息?

actionscript-3 - 检查字体是否嵌入?

actionscript-3 - AS3 不会将 POST 数据发送到浏览器 - URLRequestHeader 内容类型错误?

javascript - 将变量分配给 jQuery 中的包装器集不会使代码正常工作

javascript - 将ViewBag数据传递给requirejs或knockout