オープンSWFのインスタンスを1つだけ確保?
-
09-09-2019 - |
質問
私は、SWFのインスタンスが1つだけ、それが2つのブラウザウィンドウ、または2つの異なるブラウザであるかどうか、コンピュータ上の任意の一時点で開いていることを確認する必要があります。
どのように私はそれをやって行くことができますか?
私は、これまで二つの潜在的な解決策を考えています:
1)フラッシュのSharedObjectを使用して - しかし、彼らは期限切れにならないので、ユーザーはそれを削除するには、私の終了関数を呼び出すことなく、ブラウザウィンドウを閉じた場合、残りのオブジェクトは、他の新しいセッションを妨害します。 (おそらく、乱数及びタイムスタンプインスタンスを識別するために?)
2)のLocalConnection使用 - ハックビット、これはLocalConnectionオブジェクトが使用されているかどうかを検出し、その場合はロードしていないSWFにrelys。しかしlocalconnectionsはわずかな挑発でクラッシュするようですので、私はそれを使って少し警戒しています。
解決
私はのLocalConnectionはSharedObjectのソリューションを介して1つadvatageを持っていると信じて - ローカル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');
}
}
}
他のヒント
、私は共有オブジェクトは、安全な賭けだと思います。私はブラウザを手動で閉じている場合でも、あなたがキャッチすることができシャットダウンイベントがあるはず、複雑なのセッション確立を心配する必要はないと思います。 (存在しない場合でも、私はSOをがどんなシャットダウン時にフラッシュされていませんので、いくつかの回避策が可能であることを99%確信しています。)
ただし、共有オブジェクトは、本質的にSWFの場所にリンクされているので、ユーザーはローカルに保存、または別のWebサーバー、または任意にアップロードしたSWFの2番目のコピーを見ることによって、上記の方法を回避できます。それが心配だし、SWFはまだそのような状況でうまくいくなら、私が考える場合のLocalConnectionは、あなたの唯一の選択肢です。しかし、私はどちらか非常に信頼性が高いことがLCを発見したことがありません。それは防弾作ることができるかどうかは知りませんが、私はそれが唯一の他の選択肢だと思います。
注、側LocalConnectionとバグがあります http://k2xl.com/wordpress/2011/ 4月30日/側LocalConnection-バグ・イン・フラッシュプレーヤー/ の