谷歌铬扩展:: 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
。 你会看到这样的截图。
在您的扩展下,点击链接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; }