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://*?