4

javascript を使用して、現在すべての主要なブラウザーで開いているすべての個別のブラウザー ウィンドウを一意に識別するにはどうすればよいですか? 知っておくべきことを説明し、以下のシナリオを考えてみましょう。

現在開いている 3 つのブラウザ ウィンドウ [最新のブラウザ、つまり Chrome、Firefox など] があり、それぞれに複数のタブが含まれています。

  • ウィンドウ #1: 3 つのタブ [タブ A、タブ B、およびタブ C]
  • ウィンドウ #2: 2 つのタブ [タブ D とタブ E]
  • ウィンドウ #3: 4 つのタブ [タブ F、タブ G、タブ H、およびタブ I]

各ブラウザ ウィンドウを一意に識別するにはどうすればよいですか [つまり、タブのウィンドウではなく、ブラウザ ウィンドウごとに一意の ID/値を取得します]。そのため、最終的には 9 つの ID [すべてのタブ] ではなく、3 つの ID [すべてのウィンドウ] が表示されます。jQuery [crossrider] を使用するブラウザー アドオンまたは拡張機能を作成することで、ウィンドウ内のすべてのタブを識別することができましたが、各ウィンドウを一意に識別する方法を見つけることができませんでした。

これは JavaScript/JQuery で可能ですか? もしそうなら、どのように?そうでない場合、なぜですか?

javascript で「window.name」を試してみましたが、3 つの ID ではなく 9 つの ID が得られます。

4

1 に答える 1

1

私の知る限り、これは現在の Crosssrider API では実行できません!

クロスブラウザー プラグイン以外の実装に戻す
必要があるため、ターゲットとするブラウザーごとに個別の拡張機能を実装します。

たとえば、Chrome拡張機能では、chrome.windows.getAll関数を使用します

chrome.windows.getAll(object getInfo, function callback)

それぞれを数えて識別することができるウィンドウのすべてのインスタンスを取得します。例えば:

chrome.windows.getAll({populate : true}, function (window_list) {
    var count = window_list.length; // You now have their count
    for(var i=0; i<count; i++) {
        var myWindow = window_list[i];
        // Do whatever you want here !
    }
});

マニフェストのタブのアクセス許可を忘れないでください!

{
  ...
  "permissions": ["tabs"],
  ...
}


Firefoxプラグインの場合、クラスを使用してそのメソッドnsIWindowMediatorを呼び出しますgetEnumerator

var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"]
                     .getService(Components.interfaces.nsIWindowMediator); 
var enumerator = windowMediator.getEnumerator(null); // returns an iterator of all windows
var count = 0;
while (enumerator.hasMoreElements()) {
    var myWindow = enumerator.getNext();
    count++; 
    // Do whatever you want here !
}
// You now have their count


また、Safari拡張機能の場合、safari.application.browserWindowsたとえば、開いているすべてのウィンドウの配列を取得できます。

var count = safari.application.browserWindows.length; // You now have their count
for(var i=0; i<count; i++) {
    var myWindow = safari.application.browserWindows[i];
    // Do whatever you want here !
}
于 2013-10-25T20:31:34.527 に答える