【问题标题】:Flex BlazeDS detect browser closeFlex BlazeDS 检测浏览器关闭
【发布时间】:2012-09-07 09:16:41
【问题描述】:

我有一个使用 StreamingAMF 通道连接到 BlazeDS 服务器的 Flex 应用程序。如果浏览器关闭,我想在服务器端进行检测。我为 FlexClientListener 添加了一个实现并将其注册到 FlexClient (FlexContext.getFlexClient().addClientDestroyedListener)

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

【问题讨论】:

    标签: spring apache-flex browser blazeds


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我们也有类似的问题,不关闭会话导致 BlazeDS 中的内存泄漏,我们在 swf wrapper 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 方法提供足够的时间来执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 2014-02-21
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多