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

原文 标签 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
        }

    );
};

最佳答案

您的代码中有一个小错误:用于接收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扩展程序中使用HTML5的localStorage?

javascript - 修改嵌套的JSON对象

javascript - <br>无法在工具提示的标题标签中使用

javascript - JS入门级Firebase:获取后续的k个项目

javascript - 图表两边的chartJS标签

javascript - 如何在没有开发人员控制台的情况下在Chrome中运行JS代码段?

c# - 使用枚举从后端到前端(javascript)的错误处理,我应该在哪里放置翻译?

javascript - Chrome扩展程序中的后台页面和弹出页面之间的通信

javascript - Google Cloud Vision(Chrome)结果限制为5

c++ - 进行通讯时发生Chrome Native Messaging错误