如何使用chrome.tabs.getCurrent获取Chrome扩展程序中的页面对象?

Tom*_*Tom 31 html javascript google-chrome-extension google-chrome-devtools

该代码用于将用户正在查看的页面的当前选项卡对象输出到控制台,但它只输出undefined.它在浏览器操作页面中运行.

chrome.tabs.getCurrent( function(tab){
    console.log(tab);
} );
Run Code Online (Sandbox Code Playgroud)

我查看了文档 ,据我所知,代码似乎与它所说的相符.

Kon*_*nin 92

getSelected()自Google Chrome 16以来,该方法已被弃用(但官方文档中的许多文章尚未更新).官方消息在这里.要获取在指定窗口中选择的选项卡,请使用chrome.tabs.query()参数{'active': true}.所以现在看起来应该是这样的:

chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
  console.log(tabs[0]);
});
Run Code Online (Sandbox Code Playgroud)

  • 那么为什么 chrome.tabs.getCurrent 在 OP 的代码中不起作用呢?这也是我的问题。 (2认同)
  • 仍然相关...... 7 年后我不知道为什么他们不更新他们的文档 (2认同)

ser*_*erg 20

尝试:

chrome.tabs.getSelected(null, function(tab){
    console.log(tab);
});
Run Code Online (Sandbox Code Playgroud)

  • 不推荐,请参阅下面的@konstantin的回答. (8认同)

Gre*_*ang 7

由于chrome.tabs仅在后台或弹出脚本中可用,并且后台脚本在任何选项卡中均不活动,因此chrome.tabs.getCurrent()始终返回undefined

Tab相反,我们可以从任何消息侦听器回调的第二个参数中检索活动对象。例如,

browser.runtime.onMessage.addListener((message, sender) => {
  console.log('Active Tab ID: ', sender.tab.id);
});
Run Code Online (Sandbox Code Playgroud)