【问题标题】:Fail to send message from popup.js in Chrome extension to background.js无法从 Chrome 扩展中的 popup.js 向 background.js 发送消息
【发布时间】:2014-12-11 13:51:50
【问题描述】:

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

    );
};

【问题讨论】:

    标签: javascript google-chrome-extension


    【解决方案1】:

    您的代码中有一点错误:在用于接收 background.js 脚本中的消息的函数中,您在变量 request.command 上使用了 switch 语句,但是在其中,您是检查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,它已经过时了。

    【讨论】:

    • 谢谢!我已经解决了这个问题,现在新标签可以成功打开了。但我也想知道为什么我必须删除 chrome.windows.create 中的 tabId 选项才能使其运行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2013-03-12
    • 2015-04-19
    • 2018-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多