谷歌铬扩展:: console.log()从后台页面?

如果我打电话给console.log('something'); 从popup页面,或包括任何脚本,它工作正常。

但是,由于背景页面不是直接从popup页面运行,所以不包含在控制台中。

有没有办法,我可以得到console.log()在后台页面显示在控制台的popup页面?

有没有办法从背景页面调用popup页面中的一个函数?

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

这意味着,在popup的页面 ,你可以做:

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

为了使它更容易使用:

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

现在如果你想在内容脚本中做同样的事情,你必须使用消息传递来实现这一点。 原因是,他们都属于不同的领域,这是有道理的。 消息传递页面中有很多示例供您检查。

希望清除一切。

抛出显而易见的答案,以防万一。 你知道你可以打开后台页面的控制台,如果你点击扩展名单中的“background.html”链接,对吧?

编辑

要访问与扩展对应的后台页面,请打开Settings / Extensions或打开一个新选项卡并inputchrome://extensions 。 你会看到这样的截图。

Chrome扩展程序对话框

在您的扩展下,点击链接background page 。 这将打开一个新窗口。 对于上下文菜单示例 ,窗口的标题为: _generated_background_page.html

要直接回答您的问题,当您从后台调用console.log("something") ,会将此消息logging到后台页面的控制台。 要查看它,你可以去chrome://extensions/并点击你的扩展下的inspect view

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

您仍然可以使用console.log(),但它会被logging到一个单独的控制台中。 为了查看它 – 右键单击​​扩展名图标并select“检查popup”。

最简单的解决scheme是将以下代码添加到文件的顶部。 而且,您可以像平常一样使用所有完整的Chrome控制台API 。

  console = chrome.extension.getBackgroundPage().console; // for instance, console.assert(1!=1) will return assertion error // console.log("msg") ==> prints msg // etc 

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

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

关于原来的问题,我想补充一下穆罕默德·曼苏尔(Mohamed Mansour)接受的答案,也有一种方法可以让这个工作变成另一种方式:

您可以使用chrome.extension.getViews()调用从背景页面/脚本中访问其他扩展页面(即选项页面,popup页面)。 如此处所述。

  // 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; }