Я не уверен, что он будет работать в 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
, является live collection, и вы не указали, как вы используете массив. Ваш другой код может, а может и не быть, считать, что этот список жив.
Если вы определенно хотите, чтобы все вкладки, чтобы быть в одном массиве, вы могли бы 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));
}
Примечания: Код для петли через окно первоначально было взято из Converting an old overlay-based Firefox extension into a restartless addon которой автора переписана в качестве начальной части How to convert an overlay extension to restartless на MDN.
Я не могу дать вам верх, но спасибо большое! –