如果我调用console.log('something');从弹出页面,或任何脚本,包括它的工作良好。
然而,由于后台页面不是直接运行弹出页面,它不包括在控制台。
是否有一种方法,我可以得到console.log()的后台页面显示在控制台的弹出页面?
有没有办法从后台页面调用弹出页面中的函数?
如果我调用console.log('something');从弹出页面,或任何脚本,包括它的工作良好。
然而,由于后台页面不是直接运行弹出页面,它不包括在控制台。
是否有一种方法,我可以得到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;
}
其他回答
我得到null
根据文件,
MV3中的后台页面由service worker替换。 更换背景。页面或背景。带有背景的脚本。manifest.json中的Service_worker。注意,service_worker字段接受一个字符串,而不是字符串数组。
manifest.json
{
"manifest_version": 3,
"name": "",
"version": "",
"background": {
"service_worker": "background.js"
}
}
无论如何,我不知道如何使用getBackgroundPage,但我找到了另一个解决方案如下,
解决方案
使用chrome.scripting.executeScript
因此您可以注入任何脚本或文件。可以直接点击inspect (F12)进行功能调试。
例如
chrome.commands.onCommand.addListener((cmdName) => {
switch (cmdName) {
case "show-alert":
chrome.storage.sync.set({msg: cmdName}) // You can not get the context on the function, so using the Storage API to help you. // https://developer.chrome.com/docs/extensions/reference/storage/
chrome.tabs.query({active: true, currentWindow: true}).then(([tab])=>{
chrome.scripting.executeScript({
target: {tabId: tab.id},
function: () => {
chrome.storage.sync.get(['msg'], ({msg})=> {
console.log(`${msg}`)
alert(`Command: ${msg}`)
})
}
})
})
break
default:
alert(`Unknown Command: ${cmdName}`)
}
})
我创建了一个开源供你参考。
试试这个,如果你想登录到活动页面的控制台:
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;
}
const log = chrome.extension.getBackgroundPage().console.log;
log('something')
打开日志:
开放:chrome: / / extensions / 详细信息>背景页面
您仍然可以使用console.log(),但是它会被记录到一个单独的控制台。 为了查看它-右键单击扩展图标,选择“检查弹出”。