2012-08-10 138 views
20

私は、ブラウザ内のどのタブを識別できるかを知る必要があります。タブを識別するためにブラウザから取得できる情報はありませんか?私は他のタブについては何も知る必要はありません。私が入っているタブのIDが必要です。ランダムでも順序付けされた数値でも、日時スタンプでも構いません。タブの寿命。JavaScriptのブラウザタブを識別する方法はありますか?

リモートサーバーとのHTTP接続でBOSHを作成するクライアントサイドのアプリケーションがあります。複数のタブで開くと、それぞれのインスタンスに固有のIDが必要です。つまり、アプリケーションが失敗するため、そのタブが存在する限り(つまり、このアプリを提供しているサイトをナビゲートするときにページの更新が残っている限り)タブに関連付けられています。 window.tabIdのようなブラウザで利用できるはずのようなものではないでしょう。それだけです。私は深刻な開発ブロックを持っています。なぜなら、存在していないこのシンプルでシンプルでシンプルな解決策を乗り越えることができないからです。方法がなければなりません(ブラウザ間の解決策です)。

アイデア?

答えて

9

あなたはhtml5を使用する必要がありますが、ランダムなGUIDと組み合わせたsessionStorageはあなたが望むものと思われます。

+1

数字は、彼らがいない、ランダムに選択された場合でも、二回発生する可能性がありますか?したがって、2つのタブに同じ番号を割り当てることができます。 localStorageのシリアル番号がうまくいくと思いました。新しいタブでページを開いたときに、番号を増やしてsessionStorageに保存します。 –

+0

@MaxWaterman:異なるブラウザ、プライベートタブ、時間の変更...シリアルはランダムよりも保証されません。それが得られるほど良いguidを作成するには様々な方法があります - 衝突の可能性が非常に小さいので、邪魔にならないほど価値がないでしょう。 – jmoreno

1

"window.name"プロパティを使用する解決策の1つがありますが、他の人が使用できるため、使用したくありません。

もう1つの解決策が見つかりました:sessionStorageを使用しています。 FF3.5 +、Chrome4 +、Safari4 +、Opera10.5 +、IE8 +でサポートされています。

var tabID = sessionStorage.tabID ? sessionStorage.tabID : sessionStorage.tabID = Math.random(); 

UPDATE:いくつかのケースでは
あなたが同じのsessionStorageを有することができ、あなたがのsessionStorageに乱数を定義し、存在する場合、最初にそれを得ることができるように

16

のsessionStorageは、タブ/ウィンドウごとです複数のタブで(たとえば、タブを複製するとき)。その場合、次のコードを助けることができる:

var tabID = sessionStorage.tabID && sessionStorage.closedLastTab !== '2' ? sessionStorage.tabID : sessionStorage.tabID = Math.random(); 
sessionStorage.closedLastTab = '2'; 
$(window).on('unload beforeunload', function() { 
     sessionStorage.closedLastTab = '1'; 
}); 
+0

このコードは大いに役立ちますが、ウィンドウを複製するとデータ記憶域が残る –

+0

セッション記憶域がIEに残らない。 –

+2

番号をランダムに選んでも、それらが一意であることが保証されていません(つまり、0から99の間の乱数を選びます。常に11回繰り返すことができます)。なぜlocalStorageのシリアル番号はありませんか? –

0

ユーザ開口部の任意オッズ2ミリ秒以内に3つのタブがない場合、タイムスタンプを使用して、window.nameにそれを格納し、キーとしてそれを使用することができあなたの検索で。 window.nameの値は、閉じられるまでタブのままです。

Timestamp

関連する問題