无法将Chrome扩展程序中popup.js的消息发送至background.js

时间:2014-12-11 13:51:50

标签: javascript google-chrome-extension

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

    );
};

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