我有一个Flex应用程序,它使用StreamingAMF通道连接到BlazeDS服务器。如果浏览器关闭,我想在服务器端检测。我已经添加了FlexClientListener &实现它注册到FlexClient(FlexContext.getFlexClient()。addClientDestroyedListener)Flex BlazeDS检测浏览器关闭
但听者的clientDestroyed方法上的浏览器关闭,则不会调用。它在会话超时时被调用。有没有其他方法可以实现这一点?
我有一个Flex应用程序,它使用StreamingAMF通道连接到BlazeDS服务器。如果浏览器关闭,我想在服务器端检测。我已经添加了FlexClientListener &实现它注册到FlexClient(FlexContext.getFlexClient()。addClientDestroyedListener)Flex BlazeDS检测浏览器关闭
但听者的clientDestroyed方法上的浏览器关闭,则不会调用。它在会话超时时被调用。有没有其他方法可以实现这一点?
您将无法从服务器检测到客户端上的浏览器交互。
你最好的猜测是利用ExternalInterface。它允许您的Flash应用程序与JavaScript进行通信,反之亦然。
使用JavaScript onClose event触发一些JavaScript,它将调用Flash应用程序中的一个函数,该函数将进行远程调用,让服务器端知道浏览器正在关闭。
我们也有类似的问题,而不是关闭会话导致内存泄漏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方法执行足够的时间。