2012-09-07 112 views
1

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

但听者的clientDestroyed方法上的浏览器关闭,则不会调用。它在会话超时时被调用。有没有其他方法可以实现这一点?

回答

0

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

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

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

0

我们也有类似的问题,而不是关闭会话导致内存泄漏BlazeDS的,我们写在SWF包装下面的脚本JavaScript,以便使确保关闭浏览器调用在柔性

<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方法执行足够的时间。