Flex BlazeDS检测到浏览器关闭



我有一个Flex应用程序,它使用StreamingAMF通道连接到BlazeDS服务器。我想在服务器端检测,以防浏览器关闭。我添加了FlexClientListener&将其注册到FlexClient(FlexContext.getFlexClient().addClientDestroyedListener)

但是Listener的clientDestroyed方法不会在浏览器关闭时调用。它在会话超时时被调用。还有其他方法可以做到这一点吗?

您将无法从服务器检测到客户端上的浏览器交互。

您的最佳猜测是使用ExternalInterface。它允许您的Flash应用程序与JavaScript进行通信,反之亦然。

使用JavaScript onClose事件触发一些JavaScript,这些JavaScript将调用Flash应用程序中的一个函数,该函数将进行远程调用,让您的服务器端知道浏览器正在关闭。

我们也遇到了类似的问题,没有关闭会话导致BlazeDS中的内存泄漏,我们用swf包装器javascript编写了以下脚本,以确保关闭浏览器调用flex 中的会话关闭代码

<script language="JavaScript" type="text/javascript">
    function cleanup()
    {
        getMyApplication("swf_filename_without_extension").cleanUp();    
        alert("Disconnected! Press OK to continue.");
    }
    function getMyApplication(appName)
    {
        if (navigator.appName.indexOf ("Microsoft") != -1)
         {
              return window[appName];
         }
         else
         {
              return document[appName];
         }
    }
</script>

<body onbeforeunload="cleanup()">

在Flex中,在创建完成侦听器时添加回调

  ExternalInterface.addCallback("cleanUp",cleanUp);

并在cleanUp方法中编写所有会话结束代码。

注意:不要忘记将警告消息放在javascript中。这将为cleanUp方法的执行提供足够的时间。

相关内容

  • 没有找到相关文章

最新更新