Chrome-Extension:遍历所有选项卡?

发布于 2024-10-26 00:10:19 字数 70 浏览 2 评论 0原文

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

How would I iterate through all tabs a user has open and then check if they have a particular HTML item with id = 'item'?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

2024-11-02 00:10:19

看来此方法已被弃用,取而代之的是 chrome.tabs.query

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

所以现在你想要做的是:

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

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

It appears this method has been deprecated in favor of chrome.tabs.query:

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

So now you'd want to do:

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

Passing an empty queryInfo parameter would return all of the tabs.

又爬满兰若 2024-11-02 00:10:19

你可以这样做:

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 所以第一个代码片段是针对背景页面,第二个必须位于内容脚本上;)

You can make it like this:

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

After that to look after your item, if you can make it like this :

document.getElementById('item')

Don't forget that you can't manipulate the HTML by using the "background page" So the first code snip is for the background page, and the second have to be on a content script ;)

玩世 2024-11-02 00:10:19

2022 年 7 月编辑:

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

原始答案

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

异步回调版本

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

Promise 版本

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

在这两种情况下,参数 tab 都是 选项卡

Edit July 2022:

This answer was originally written for MV3 users. If you're looking for a MV2 answer, see above. Otherwise, this answer will work perfectly fine with MV3.

Original answer

chrome.tabs.query is the function you're looking for. You can pass in parameters to a object to filter the tabs. In your case, you want to iterate over all the open tabs. Here's two versions of the code you're looking for:

Asynchronous callback version

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

Promise version

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

In both cases, the parameter tab is a Tab.

听,心雨的声音 2024-11-02 00:10:19

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

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

This is a not deprecated vanilla way (may 2019):

chrome.tabs.query({}, function(tabs){
        tabs.forEach(tb => {
            chrome.tabs.sendMessage(tb.id, { action: "xxx" });
        });
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文