如何使用javascript唯一标识当前为所有主流浏览器开放的每个单独的浏览器窗口?让我解释一下我需要知道的内容,让我们考虑下面的场景:
我有3个浏览器窗口[任何现代浏览器,即Chrome,Firefox等]当前打开,每个窗口都包含多个标签。
如何唯一识别每个浏览器窗口[即捕获每个浏览器窗口的唯一ID /值,而不是选项卡的窗口]?所以,最后我将有3个ID [所有窗口],而不是9个ID [所有标签]。我能够通过创建使用jQuery [crossrider]的浏览器插件或扩展来识别窗口中的所有选项卡,但无法找到唯一标识每个窗口的方法。
这可以通过JavaScript / JQuery实现吗?如果是这样,怎么样?如果没有,为什么?
我在javascript中尝试了“window.name”,但这给了我9个ID,而不是3个ID。
答案 0 :(得分:2)
据我所知,目前的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 !
}