2013-10-24 40 views
4

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

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

  • 窗口#1:3个标签[选项卡A,选项卡B,和Tab C]
  • 窗口#2:2个翼片[索引d和Tab E]
  • 窗口#3:4个标签[标签F,Tab G,Tab H和Tab I]

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

这可能由JavaScript/JQuery的?如果是这样,怎么样?如果不是,为什么?

我试过 “window.name” 在JavaScript中,但是这给了我9点的ID,而不是3组的ID。

+0

我不是很清楚你为什么要识别窗口,什么是用例?现代浏览器通常将标签视为窗口(以前称为“许多打开的窗口”现在是“许多打开的标签”),并将它们作为单独的过程来实现。所以,真的,你只需要从你的评论中可以看出你已经设法获得的标签身份。 [免责声明]我是Crossrider的员工 – Shlomo

+1

感谢您的帮助。我想通过用户按钮点击将用户的浏览会话[当前打开的窗口和标签]保存到云/服务器,以便用户可以离开/关闭他/她的浏览器/计算机,再次返回并开始浏览他/她离开。例如,当Chrome崩溃时,它会记住用户的上一次会话,并在崩溃前重新打开所有窗口和标签,以便用户不必重新打开它们。在这种情况下,我不想在1窗口中保存/打开9个选项卡,但在窗口#1中选择3个选项卡,在窗口2中选择2个选项卡,并在窗口3中选择4个选项卡。 – Ali007

+1

有很多扩展/插件的场景,其中窗口跟踪非常重要,我认为Crossrider应该更新其API以支持浏览器窗口识别 –

回答

2

据我所知,这不能与当前Crosssrider API来完成!

您必须切换回非跨浏览器插件实施,
,以便您针对每个您定位的浏览器实施单独的扩展。

例如在扩展,使用chrome.windows.getAll功能

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

获得Windows的所有情况下,您会数数,识别每一个。 例如:

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"], 
    ... 
} 


火狐插件,使用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 ! 
} 
+0

你能使用普通的javascript或jQuery获取/设置浏览器窗口的任何值[即window.name]吗?真的只是为了辨认窗户或将它们区分开来吗? – Ali007

+0

感谢您的帮助。有趣的是,你没有提到IE ...... ;-) – Ali007

+1

你只能获取/设置每个窗口API中可用的字段的值作为gettable/settable字段(注意有些字段是只读的),所以你必须检查窗口对象,并首先检查该字段(适用于您的应用程序逻辑)是否可访问以及它的gettable/settable(API文档的链接在上面的答案中提供) –

相关问题