【问题标题】:Chrome-Extension: iterate through all tabs?Chrome-Extension:遍历所有标签?
【发布时间】:2011-07-21 12:32:22
【问题描述】:

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

【问题讨论】:

  • 你能更新选择的答案吗?该 API 现已弃用。

标签: javascript google-chrome-extension browser-tab


【解决方案1】:

你可以这样:

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

之后要照看你的物品,如果你可以这样:

document.getElementById('item')

别忘了你不能通过使用“背景页面”来操作 HTML 所以第一个代码片段是用于背景页面,第二个必须在内容脚本上;)

【讨论】:

  • 您可能想要添加以检查他可以发送的元素 document.getElementById('item') != null 并将其保存在某处并检索它以确定该元素是否存在于页面上。
  • 哈哈没问题,今天打字有点慢,不得不参考我的扩展程序以确保我写的是正确的。
  • @Sindar,为什么不直接使用提供所有标签的 tabs.query
【解决方案2】:

看来此方法已被 chrome.tabs.query 弃用:

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

所以现在你想做:

chrome.tabs.query({}, function(tabs) { /* blah */ } );

传递一个空的queryInfo 参数将返回所有选项卡。

【讨论】:

  • 但这如何遍历标签? tabs 有长度方法吗?大多数 API 方法采用单个选项卡或选项卡属性,因此您需要使用 tabs[0]...tabs[n] 之类的变量对它们进行索引。如何获得 n?
  • @jiggunjer, n = tabs.length, tabs - 是一个数组
  • @Golden,如果您将第一个参数设置为 null 而不是 {},会发生什么?
【解决方案3】:

这是一种未弃用的原版方式(2019 年 5 月):

chrome.tabs.query({}, function(tabs){
        tabs.forEach(tb => {
            chrome.tabs.sendMessage(tb.id, { action: "xxx" });
        });
    });

【讨论】:

  • 也许这在 5 月有效,但截至目前,在 10 月,您似乎必须遍历 { highlighted: true }(如焦点选项卡)和 { hightlighted: false } - 全部其他的 - 真正经历所有这些。
【解决方案4】:

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

同步

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

异步

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 2010-10-25
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多