1

StreamingAMF チャネルを使用して BlazeDS サーバーに接続する Flex アプリケーションがあります。ブラウザが閉じられた場合にサーバー側で検出したい。FlexClientListener の実装を追加し、それを FlexClient に登録しました (FlexContext.getFlexClient().addClientDestroyedListener)

ただし、Listener の clientDestroyed メソッドは、ブラウザを閉じても呼び出されません。セッションタイムアウトで呼び出されます。これを達成する他の方法はありますか?

4

2 に答える 2

0

サーバーからのクライアントでのブラウザーの対話を検出することはできません。

あなたの最善の推測は、 ExternalInterfaceを利用することです。これにより、Flash アプリが JavaScript と通信できるようになり、その逆も可能になります。

JavaScript の onClose イベントを使用して、ブラウザが閉じられていることをサーバー側に知らせるためにリモート呼び出しを行う Flash アプリの関数を呼び出す JavaScript をトリガーします。

于 2012-09-07T11:43:49.597 に答える
0

私たちも同様の問題を抱えていました。セッションを閉じないと 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 メソッドを実行するのに十分な時間が与えられます。

于 2012-09-07T13:06:04.253 に答える