Chrome扩展程序:遍历所有标签?

Ski*_*zit 25 javascript google-chrome-extension browser-tab

如何迭代用户打开的所有选项卡,然后检查他们是否有特定的HTML项目id = 'item'

Gol*_*oom 59

看来这个方法已被弃用,有利于chrome.tabs.query:

http://developer.chrome.com/extensions/tabs.html#method-query

所以现在你想做:

chrome.tabs.query({}, function(tabs) { /* blah */ } );
Run Code Online (Sandbox Code Playgroud)

传递空queryInfo参数将返回所有选项卡.

  • 但这是如何迭代标签的呢?`tabs`有长度方法吗?大多数API方法都采用单个制表符或制表符属性,因此您需要使用类似`tabs [0] ... tabs [n]`的变量对它们进行索引.怎么弄? (3认同)
  • @jiggunjer,n = tabs.length,tabs - 是一个数组 (2认同)

Sin*_*dar 20

你可以这样做:

chrome.tabs.getAllInWindow(null, function(tabs){
    for (var i = 0; i < tabs.length; i++) {
    chrome.tabs.sendRequest(tabs[i].id, { action: "xxx" });                         
    }
});
Run Code Online (Sandbox Code Playgroud)

之后,为了照顾你的项目,如果你可以这样做:

document.getElementById('item')
Run Code Online (Sandbox Code Playgroud)

不要忘记你不能通过使用"后台页面"来操纵HTML所以第一个代码片段用于后台页面,第二个代码片段必须在内容脚本上;)

  • 正确答案应更改为http://stackoverflow.com/a/15281976/257319 (5认同)

小智 10

2022 年 7 月编辑:

这个答案最初是为 MV3 用户编写的。如果您正在寻找 MV2 答案,请参见上文。否则,这个答案将与 MV3 完美配合。

原答案

chrome.tabs.query是您正在寻找的功能。您可以将参数传递给对象来过滤选项卡。在您的情况下,您想要迭代所有打开的选项卡。这是您正在寻找的代码的两个版本:

异步回调版本

chrome.tabs.query({}, function(tabs) {
  tabs.forEach(function (tab) {
    // do whatever you want with the tab
  });
});
Run Code Online (Sandbox Code Playgroud)

无极版

var tabs = await chrome.tabs.query({});
tabs.forEach(function (tab) {
  // do whatever you want with the tab
});
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,参数tab都是Tab