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

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

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

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


当前回答

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

其他回答

为了直接回答您的问题,当您从后台调用console.log(“something”)时,此消息将被记录到后台页面的控制台。要查看它,你可以去chrome://extensions/并点击你的扩展下的检查视图。

当您单击弹出窗口时,它被加载到当前页面中,因此console.log应该在当前页面中显示日志消息。

关于最初的问题,我想在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;
}

要在调试chrome扩展时查看控制台,您应该使用chrome.extension. getbackgroundpage ();API,之后你可以像往常一样使用console.log():

chrome.extension.getBackgroundPage().console.log('Testing');

这是很好的,当你使用多个时间,所以你创建自定义函数:

  const console = {
    log: (info) => chrome.extension.getBackgroundPage().console.log(info),
  };
  console.log("foo");

你只在任何地方使用console.log('learnin')

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

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

任何扩展页面(除了内容脚本)都可以通过chrome.extension.getBackgroundPage()直接访问后台页面。

这意味着,在弹出页面中,你可以这样做:

chrome.extension.getBackgroundPage().console.log('foo');

使它更容易使用:

var bkg = chrome.extension.getBackgroundPage();
bkg.console.log('foo');

现在如果你想在内容脚本中做同样的事情,你必须使用消息传递来实现这一点。原因是,它们属于不同的领域,这说得通。在“消息传递”页面中有许多示例供您查看。

希望这一切都清楚了。