我希望从popup.js向background.js发送消息。当我单击按钮时,消息将发送到background.js,它将为我的指定网站打开一个新选项卡。我检查了popup.js和background.js,发现它们都没问题,只是不能将消息从popup.js发送到background.js。
popup.js
window.onload=function()
{
document.getElementById("submit").onclick=function()
{
chrome.extension.sendMessage({command:"start"});
}
}
background.js
chrome.extension.onMessage.addListener(
function(request,sender,sendResponse)
{
switch(request.command)
{
case "command":
openTab();
break;
}
return true;
}
);
var openTab=function()
{
chrome.windows.create
(
{
url:"http://www.baidu.com",
tabId:1
}
);
};
答案 0 :(得分:1)
您的代码中出现了一点错误:在用于在background.js
脚本中接收消息的函数中,您使用变量switch
上的request.command
语句,但是,在其中,您正在检查case "command"
,当您应该检查case "start"
时,因为您正在发送{command: "start"}
的消息强>
收到消息,但是根据不匹配的字符串进行检查,显然您的openTab()
函数将永远不会被调用。
要解决此问题,您可以:
更改您从popup.js
发送的邮件,如下所示:
chrome.runtime.sendMessage({command: "command"});
或者更改case
脚本中的background.js
语句:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
switch(request.command) {
case "start":
openTab();
break;
}
return true;
});
无论如何,我强烈建议您使用过时的chrome.runtime
API代替chrome.extension
。