Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展:点击popup.js激活并执行background.js_Javascript_Google Chrome_Browser_Google Chrome Extension_Browser Extension - Fatal编程技术网

Javascript Chrome扩展:点击popup.js激活并执行background.js

Javascript Chrome扩展:点击popup.js激活并执行background.js,javascript,google-chrome,browser,google-chrome-extension,browser-extension,Javascript,Google Chrome,Browser,Google Chrome Extension,Browser Extension,据我所知,在触发时,后台脚本应该被激活 background.js chrome.runtime.onMessage.addListener((message, sender, reply) => { const json = message.data; // some code reply({ result: true }) return true; }); chrome.runtime.sendMessage({ data: [<Ar

据我所知,在触发时,后台脚本应该被激活

background.js

chrome.runtime.onMessage.addListener((message, sender, reply) => {

    const json = message.data;
    // some code

    reply({ result: true })
    return true;    
});
chrome.runtime.sendMessage({ data: [<ArrayWithData>] },
    function (response) {
        logger.log(response);
    }
);
popup.js

chrome.runtime.onMessage.addListener((message, sender, reply) => {

    const json = message.data;
    // some code

    reply({ result: true })
    return true;    
});
chrome.runtime.sendMessage({ data: [<ArrayWithData>] },
    function (response) {
        logger.log(response);
    }
);
chrome.runtime.sendMessage({data:[]},
功能(响应){
logger.log(响应);
}
);
一切都很好,但只有在活动背景的情况下

为什么背景不激活?有人能解释一下我的错误吗? 或者如何从popup.js单击激活并执行background.js

我知道,如果我在manifest.json中更改
persistence:true
,或者只是删除它,一切都会正常工作。但是我想保持
持久性为false
并在需要时触发background.js。

您错过了解释如何从
popup.js
激活后台脚本的内容。检索后台页面对象后,只需调用任何函数,甚至访问字段

我总是把它放在我的
弹出窗口.js的顶部:

// Initialize background page
chrome.runtime.getBackgroundPage(function(backgroundPage) {
  console = backgroundPage.console;
})
这样,我还可以查看弹出窗口中的控制台日志以及您错过的后台视图中的日志,这解释了如何从
popup.js
激活后台脚本。检索后台页面对象后,只需调用任何函数,甚至访问字段

我总是把它放在我的
弹出窗口.js的顶部:

// Initialize background page
chrome.runtime.getBackgroundPage(function(backgroundPage) {
  console = backgroundPage.console;
})

这样,我还可以从弹出窗口查看控制台日志以及从后台视图查看日志

发布的代码不足以诊断问题。您是否依赖后台脚本中的全局变量?首先,可能您根本不需要背景脚本,因为弹出窗口具有相同的访问级别。第二,确保您正在查看正确的控制台:右键单击弹出窗口并单击“检查”。@wOxxOm,来自文档:触发事件时应激活后台脚本。我从弹出的json和onMessage调用事件,但未触发。我还需要添加哪段代码?顺便说一下,nackground脚本处于非活动模式,因此console.log将无法工作。我的帖子的主要目的是在事件触发时将背景设置为活动。你需要显示,否则我们只能随机猜测。您似乎误解了文档。后台脚本在单独的页面中运行,当persistent为false时,该隐藏页面将自动加载到消息中。看看如何检查它。弹出窗口也是一个单独的页面。后台脚本没有在弹出窗口中运行(有些人将其加载到popup.html中,但这是由于误解造成的错误)。您的console.log在弹出窗口中运行,因此将在弹出窗口的devtools控制台中打印。@wOxxOm,对不起,也许我没有理解您。因为我已经给你看了。而且我在console.log上没有问题。而且我知道关于背景是单独的一页。我的问题很清楚。当我从popup.js发送消息时,我需要激活后台。当我说这不是MCVE时,这意味着发布的代码没有重现问题,所以“V”丢失,我个人觉得争论这些事情很累。假定问题中未发布的所有其他内容都已正确实现,则发布的代码成功运行(logger.log为console.log)。发布的代码不足以诊断问题。您是否依赖后台脚本中的全局变量?首先,可能您根本不需要背景脚本,因为弹出窗口具有相同的访问级别。第二,确保您正在查看正确的控制台:右键单击弹出窗口并单击“检查”。@wOxxOm,来自文档:触发事件时应激活后台脚本。我从弹出的json和onMessage调用事件,但未触发。我还需要添加哪段代码?顺便说一下,nackground脚本处于非活动模式,因此console.log将无法工作。我的帖子的主要目的是在事件触发时将背景设置为活动。你需要显示,否则我们只能随机猜测。您似乎误解了文档。后台脚本在单独的页面中运行,当persistent为false时,该隐藏页面将自动加载到消息中。看看如何检查它。弹出窗口也是一个单独的页面。后台脚本没有在弹出窗口中运行(有些人将其加载到popup.html中,但这是由于误解造成的错误)。您的console.log在弹出窗口中运行,因此将在弹出窗口的devtools控制台中打印。@wOxxOm,对不起,也许我没有理解您。因为我已经给你看了。而且我在console.log上没有问题。而且我知道关于背景是单独的一页。我的问题很清楚。当我从popup.js发送消息时,我需要激活后台。当我说这不是MCVE时,这意味着发布的代码没有重现问题,所以“V”丢失,我个人觉得争论这些事情很累。假定问题中未发布的所有其他内容都正确实现,则发布的代码成功运行(logger.log为console.log)。