我希望从 popup.js 向 background.js 发送消息。当我单击按钮时,消息将发送到 background.js,它会为我指定的网站打开一个新选项卡。我检查了 popup.js 和 background.js,发现它们都没有问题,只是无法将消息从 popup.js 发送到 background.js。
弹出窗口
window.onload=function()
{
document.getElementById("submit").onclick=function()
{
chrome.extension.sendMessage({command:"start"});
}
}
背景.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
}
);
};
最佳答案
您的代码中有一个小错误:在您用于在 background.js
脚本中接收消息的函数中,您在变量 switch
上使用了语句 request.command
,但是在其中,您正在检查 case "command"
,而您应该检查 case "start"
而不是,因为您发送的消息是 {command: "start"}
。
消息已收到,但已根据不匹配的字符串进行检查,显然您的 openTab()
函数将永远不会被调用。
要解决此问题,您可以:
更改您从
popup.js
发送的消息,如下所示:chrome.runtime.sendMessage({command: "command"});
或者更改
background.js
脚本中的case
语句:chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { switch(request.command) { case "start": openTab(); break; } return true; });
无论如何,我强烈建议您使用 chrome.runtime
API 而不是 chrome.extension
,后者已过时。
关于javascript - 无法将消息从 Chrome 扩展中的 popup.js 发送到 background.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27424468/