如果我调用console.log('something');从弹出页面,或任何脚本,包括它的工作良好。

然而,由于后台页面不是直接运行弹出页面,它不包括在控制台。

是否有一种方法,我可以得到console.log()的后台页面显示在控制台的弹出页面?

有没有办法从后台页面调用弹出页面中的函数?


当前回答

您仍然可以使用console.log(),但是它会被记录到一个单独的控制台。 为了查看它-右键单击扩展图标,选择“检查弹出”。

其他回答

const log = chrome.extension.getBackgroundPage().console.log;
log('something')

打开日志:

开放:chrome: / / extensions / 详细信息>背景页面

这是一个老帖子,已经有很好的答案,但我补充我的两点。我不喜欢使用console.log,我宁愿使用日志记录器记录到控制台,或任何我想要的地方,所以我有一个模块定义了一个日志函数,有点像这样

function log(...args) {
  console.log(...args);
  chrome.extension.getBackgroundPage().console.log(...args);
}

当我调用日志时(“这是我的日志”),它将在弹出式控制台和后台控制台中写入消息。

这样做的好处是可以在不更改代码的情况下更改日志的行为(比如禁用生产日志等)。

目前使用Manifest 3和service worker,你只需要进入扩展页面/详细信息,然后单击Inspect Views / service worker。

试试这个,如果你想登录到活动页面的控制台:

chrome.tabs.executeScript({
    code: 'console.log("addd")'
});

关于最初的问题,我想在Mohamed Mansour的公认答案中补充一点,也有一种方法可以反过来解决这个问题:

你可以通过chrome.extension.getViews()调用从后台页面/脚本中访问其他扩展页面(即选项页,弹出页面)。如这里所述。

 // overwrite the console object with the right one.
var optionsPage = (  chrome.extension.getViews()  
                 &&  (chrome.extension.getViews().length > 1)  ) 
                ? chrome.extension.getViews()[1] : null;

 // safety precaution.
if (optionsPage) {
  var console = optionsPage.console;
}