2

2 つのブラウザー ウィンドウで開いている場合でも、2 つの異なるブラウザーで開いている場合でも、SWF のインスタンスが 1 つのコンピューターで一度に 1 つだけ開いていることを確認する必要があります。

どうすればそれを行うことができますか?

これまでのところ、2 つの潜在的な解決策を考えてきました。

1) Flash 共有オブジェクトの使用 - ただし、有効期限が切れないため、ユーザーが終了関数を呼び出さずにブラウザー ウィンドウを閉じて削除すると、残りのオブジェクトが他の新しいセッションに干渉します。(インスタンスを識別するための乱数とタイムスタンプでしょうか?)

2) localconnection の使用 - 少しハックですが、これは Localconnection オブジェクトが使用されているかどうかを検出する swf に依存し、使用されている場合はロードしません。しかし、localconnections は少しの刺激でクラッシュするように見えるので、使用には少し注意が必要です。

4

3 に答える 3

2

LocalConnection には、SharedObject ソリューションよりも利点が 1 つあります。私の知る限り、ローカルの SharedObject は常にドメインごとに保存されますが、グローバル スコープの LocalConnection 名が許可されます。

SharedObject に関しては、唯一のオプションは、定期的に更新されたタイムスタンプを保持し、.swf を実行するたびに確認することです。

したがって、単純な LocalConnection ベースのソリューションを選択します。これは非常に簡単で、LocalConnection で問題を経験したことがないからです。

public class LCTest extends Sprite
{
    public function LCTest()
    {
        var lc:LocalConnection = new LocalConnection();
        lc.allowDomain("*");
        try
        {
            lc.connect("_myLCLock"); // underscore for global scope
            trace('not running, can init');
        }
        catch (e:ArgumentError)
        {
            trace('already running');
        }
    }
}
于 2010-08-29T12:55:00.983 に答える
1

SWF が 1 つの場所からしか利用できない場合は、共有オブジェクトが安全な方法だと思います。複雑なセッションについて心配する必要はないと思います。ブラウザーを手動で閉じた場合でもキャッチできるシャットダウン イベントがあるはずです。(存在しない場合でも、何があってもシャットダウン時に SO がフラッシュされることは 99% 確信しているため、いくつかの回避策が可能であるはずです。)

ただし、共有オブジェクトは本質的に SWF の場所にリンクされているため、ユーザーは、ローカルに保存した SWF の 2 番目のコピーを表示したり、別の Web サーバーにアップロードしたりして、上記の方法を回避できます。それが心配で、そのような状況でも SWF が機能するのであれば、LocalConnection が唯一の選択肢だと思います。しかし、LCが非常に信頼できるとは思っていません。防弾にできるかどうかはわかりませんが、それ以外の選択肢はないと思います。

于 2009-06-04T06:16:06.727 に答える
0

LocalConnection にバグがあることに注意してください http://k2xl.com/wordpress/2011/04/30/localconnection-bug-in-flash-player/

于 2011-04-30T16:55:47.377 に答える