4

如何使用 javascript 唯一标识当前为所有主要浏览器打开的每个单独的浏览器窗口?让我解释一下我需要知道的内容,让我们考虑以下场景:

我有 3 个当前打开的浏览器窗口 [任何现代浏览器,即 Chrome、Firefox 等],每个窗口都包含多个选项卡。

  • 窗口 #1:3 个选项卡 [选项卡 A、选项卡 B 和选项卡 C]
  • 窗口 #2:2 个选项卡 [Tab D 和 Tab E]
  • 窗口 #3:4 个选项卡 [Tab F、Tab G、Tab H 和 Tab I]

如何唯一标识每个浏览器窗口[即为每个浏览器窗口捕获唯一的 ID/值,而不是选项卡的窗口]?所以,最后我将有 3 个 ID [所有窗口],而不是 9 个 ID [所有选项卡]。我可以通过创建使用 jQuery [crossrider] 的浏览器插件或扩展来识别窗口中的所有选项卡,但找不到唯一识别每个窗口的方法。

这可以通过 JavaScript/JQuery 实现吗?如果是这样,怎么做?如果不是,为什么?

我在 javascript 中尝试了“window.name”,但这给了我 9 个 ID,而不是 3 个 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


对于Safarisafari.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 回答