Chrome-Extension:遍历所有标签?

Posted

技术标签:

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

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

【问题讨论】:

你能更新选择的答案吗?该 API 现已弃用。 【参考方案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 并将其保存在某处并检索它以确定该元素是否存在于页面上。 哈哈没问题,今天打字有点慢,不得不参考我的扩展程序以确保我写的是正确的。 正确答案应改为***.com/a/15281976/257319 @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。

【讨论】:

以上是关于Chrome-Extension:遍历所有标签?的主要内容,如果未能解决你的问题,请参考以下文章

跨源请求仅支持协议方案:http、data、chrome、chrome-extension、https

如何遍历这种数组并获取每个元素的标签或名称[重复]

为啥 Chrome 本身允许网站访问 chrome-extension://*?

遍历页面上的所有 <div> 标签

为啥我收到此错误 chrome-extension://invalid

请求仅支持协议方案:http、data、chrome、chrome-extension、https