mozrepl:循环浏览firefox所有窗口中的所有选项卡
mozrepl: loop through all tabs in all windows of firefox
我知道当我进入mozrepl会话时,我处于一个特定浏览器窗口的上下文中。在那个窗口我可以做
var tabContainer = window.getBrowser().tabContainer;
var tabs = tabContainer.childNodes;
这将在该窗口中为我提供一组选项卡。我需要在所有打开的Firefox窗口中获得一个所有选项卡的数组,我该怎么做?
我不确定它是否能在mozrepl中工作,但在Firefox插件中,您可以执行以下代码。此代码将在所有打开的浏览器窗口中循环。为每个窗口调用一个函数,在本例中为doWindow
。
Components.utils.import("resource://gre/modules/Services.jsm");
function forEachOpenWindow(fn) {
// Apply a function to all open browser windows
var windows = Services.wm.getEnumerator("navigator:browser");
while (windows.hasMoreElements()) {
fn(windows.getNext().QueryInterface(Ci.nsIDOMWindow));
}
}
function doWindow(curWindow) {
var tabContainer = curWindow.getBrowser().tabContainer;
var tabs = tabContainer.childNodes;
//Do what you are wanting to do with the tabs in this window
// then move to the next.
}
forEachOpenWindow(doWindow);
您可以创建一个包含所有当前选项卡的数组,只需让doWindow
将它从tabContainer.childNodes
获得的任何选项卡添加到一个整体列表中。我在这里没有这样做,因为您从tabContainer.childNodes
获得的是一个实时集合,并且您没有说明如何使用该数组。您的其他代码可能是,也可能不是,假设列表是活动的。
如果你确实希望所有的选项卡都在一个数组中,你可以让doWindow
如下:
var allTabs = [];
function doWindow(curWindow) {
var tabContainer = curWindow.getBrowser().tabContainer;
var tabs = tabContainer.childNodes;
//Explicitly convert the live collection to an array, then add to allTabs
allTabs = allTabs.concat(Array.prototype.slice.call(tabs));
}
注意:在窗口中循环的代码最初来自于将一个旧的基于覆盖的Firefox扩展转换为一个无restartless插件,作者重新编写了该插件,作为如何在MDN上将覆盖扩展转换为无restartless的初始部分
相关文章:
- 如何在选项卡上定义属性'的主窗口对象
- 新选项卡被弹出窗口阻止程序阻止
- 在同一选项卡中启动下载,而无需在Javascript中打开新选项卡或窗口
- 如何检测用户是否在同一会话中打开了多个窗口或选项卡
- 带有多个答案选项的Javascript动态数组窗口
- 更改当前选项卡或浏览器窗口的标题
- 如何在新选项卡中而不是在新窗口中打开URL
- 如何禁用鼠标中键单击超链接以在新选项卡或新窗口中打开
- 只有当选项卡/窗口有焦点时,页面才能每5秒刷新一次
- 如何打开一个新窗口或选项卡,并将其提供给javascript执行
- 根据窗口宽度动态更改jQuery滑块选项
- 如何在windowsphone 7浏览器中通过javascript打开新窗口或选项卡
- MS Dynamics CRM 2016-打开记录时强制新建选项卡/窗口
- 在Chrome中的适当选项卡/窗口中打开URL
- 打开一个新的选项卡/窗口并向其写入内容
- Chrome 打开选项卡与窗口.打开
- 使用 POST 打开新的选项卡或窗口 [PHP]
- 激活镀铬窗口选项卡
- 选项卡在新窗口上提交表单,原因
- Firefox扩展首选项窗口上的synctopreference按钮