2009-06-04 8 views
2

2つのブラウザーウィンドウ、または2つの異なるブラウザーにかかわらず、コンピューター上でいつでもSWFのインスタンスが1つだけ開いていることを確認する必要があります。SWFのインスタンスを1つだけ開いていることを確認しますか?

どうすればいいですか?

私がこれまでに二つの潜在的な解決策を考えている

1)フラッシュのSharedObjectを使用する - それを削除する機能を辞め、私呼び出すことなく、ユーザーがブラウザウィンドウを閉じた場合、彼らは無期限以降、残りのオブジェクト他の新しいセッションに干渉します。 (インスタンスを識別するためにおそらく乱数及びタイムスタンプ?)

2)のLocalConnectionを使用 - ビットハック、これはLocalConnectionオブジェクトが使用されているかどうかを検出するSWFにrelys、及びその場合はロードしません。しかし、ローカル接続はわずかな挑発でクラッシュするようですので、私はそれを少し使用することに注意しています。

+0

のバグはありますか? – grawity

+1

あなたはどのプレーヤーのバージョンをターゲットにしていますか? – back2dos

+0

Flash player 10/AS3 – futureelite7

答えて

2

LocalConnectionには、SharedObjectソリューションに対する1つのアドバンテージがあると思います。グローバルスコープのLocalConnectionの名前を許可しますが、ローカルSharedObjectは常にドメインごとに保存されます。

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'); 
     } 
    } 
} 
1

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

しかし、共有オブジェクトは、ユーザーは、ローカルに保存したSWFの別のコピーを表示するか、別のWebサーバーにアップロードしたものなど、上記の方法を回避することができます。これが心配で、SWFがまだこのような状況で動作する場合は、LocalConnectionが唯一の選択肢だと思います。しかし、私はLCが非常に信頼できるものであることは決してありませんでした。私はそれが防弾にすることができるかどうかはわかりませんが、私はそれが唯一の他の選択肢だと思います。

+0

異なるブラウザのフラッシュプラグインが同じ場所にSOを持っているかどうかはわかりません。これはうまくいかないかもしれません。 – grapefrukt

+0

すべてのフラッシュプレーヤーはSOを同じ場所に保存します。 – fenomas

+0

偉大な答え。私の友人は現在、彼のフラッシュゲームでこれを実装しようとしています。あなたが気にしない場合は、SOメソッドに関する詳細を投稿できますか?いくつかの指示、作業コードのサンプル、または参照がうまくいくでしょう。 – andyk

関連する問題