javascript - 无法将消息从Chrome扩展程序中的popup.js发送到background.js

我希望将消息从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
        }

    );
};


最佳答案:

您的代码中有一个小错误:用于接收background.js脚本中消息的函数中,您正在使用变量switch上的request.command语句,但是在其中,您要检查< cc>,则应改为检查case "command",因为您要发送的邮件是case "start"

收到了该消息,但是检查了不匹配的字符串,显然您的{command: "start"}函数将永远不会被调用。

要解决此问题,您可以:


更改从openTab()发送的邮件,如下所示:

chrome.runtime.sendMessage({command: "command"});

或在popup.js脚本中更改case语句:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    switch(request.command) {
        case "start":
            openTab();
            break;
    }

    return true;
});



无论如何,我强烈建议您使用background.js API代替过时的chrome.runtime

译文:来源   文章分类: javascript google-chrome-extension

相关文章:

javascript - jQuery或Javascript-如何禁用窗口滚动而不会溢出:

javascript - 如何与LibGDX HTML5应用通信?

javascript - ajaxStart取消jQuery自动完成

c# - 将鼠标悬停在asp.net中的图片控件(如Facebook图片)上

javascript - 为什么出错angularjs错误:$ compile:tpload错误加载模板

javascript - 仪表D3,显示值位置

javascript - 比较NodeJS缓冲区,同时避免定时攻击

javascript - 从ES6模块导入函数表达式或函数声明有什么区别?

javascript - 在Polymer中使用第三方依赖性(pikadate)

javascript - 在Firefox下按Escape会终止我的Ajax请求。我想防止这种情况