谷歌浏览器扩展 :: console.log() 来自后台页面?

IT技术 javascript google-chrome google-chrome-extension
2021-03-20 15:59:20

如果我console.log('something');从弹出页面调用,或者包含任何脚本,它可以正常工作。

但是,由于后台页面不是直接从弹出页面运行的,因此它不包含在控制台中。

有没有办法让console.log()'s 在后台页面中显示在弹出页面的控制台中?

有什么办法可以从后台页面调用弹出页面中的函数吗?

6个回答

如果您单击扩展列表中的“background.html”链接,您可以打开后台页面的控制台。

要访问与您的扩展程序相对应的后台页面,请打开Settings / Extensions或打开一个新选项卡并输入chrome://extensions. 您将看到类似此屏幕截图的内容。

Chrome 扩展程序对话框

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

@Hailwood 打开背景页面不会调用任何东西,但会显示背景页面的控制台。
2021-04-21 15:59:20
我发现这个问题搜索如何检查扩展输出(如 OP)并发现这个答案非常有用,因为它允许我在不通过内容页面的情况下检查控制台日志记录。
2021-04-27 15:59:20
打开后台页面不会输出任何控制台日志信息。
2021-04-29 15:59:20
干杯,我知道这一点,但是直接打开背景页面不会从弹出页面调用任何内容。
2021-05-03 15:59:20
@Layke 一旦你打开后台页面,你仍然需要写入它,即直接从后台页面使用 console.log() 或者,正如 mohamed-mansour 所说,在 getBackgroundPage() 返回的对象上调用相同的方法
2021-05-12 15:59:20

任何扩展页面内容脚本除外)都可以通过chrome.extension.getBackgroundPage().

这意味着,在弹出页面中,您可以执行以下操作:

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

为了更容易使用:

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

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

希望能清除一切。

这非常适合我自己的消息来控制台。谢谢。关于如何从 popup.js 中创建异常等的任何想法出现在 background.js 的控制台中?
2021-04-29 15:59:20
@MohamedMansour,这个解决方案对我不起作用。如果我alert() chrome.extension.getBackgroundPage(),我得到null我是否需要设置权限或其他一些配置?
2021-05-17 15:59:20
@gwg 你的扩展有后台页面吗?根据文档“如果扩展没有背景页面,则返回 null”。developer.chrome.com/extensions/...
2021-05-19 15:59:20

要直接回答您的问题,当您console.log("something")从后台调用时,此消息会记录到后台页面的控制台。要查看它,您可以转到chrome://extensions/并单击inspect view扩展程序下的那个

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

如果你像我一样有 3 台显示器......请转动你的头。它在我的监视器阵列的另一端打开 ChromeDevTools,但我没有看到它。
2021-05-08 15:59:20
我的扩展没有那个,但是其他扩展有!我如何启用它
2021-05-09 15:59:20

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

最简单的解决方案是在文件顶部添加以下代码。并且您可以像往常一样使用所有完整的Chrome 控制台 API

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