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

标签 javascript google-chrome-extension

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

相关文章:

javascript - 如何否定 chrome.storage.local 中的变量

javascript - Jquery时间立方

javascript - 如何格式化此 Google Apps 脚本中的时间?

javascript - 类型错误 : Cannot read property 'method' of undefined

javascript - 以不可检测的方式检查 WebSocket 帧

javascript - 内容脚本创建的元素在页面上创建 Gmail、Facebook、stackoverflow 等问题

javascript - 在 Chrome、Firefox 或 IE 上更改 navigator.platform 以测试操作系统检测代码

javascript - 如何修复 chrome-extension 内联 JavaScript 调用错误?

javascript - 使用 GWT/Java/JavaScript 滚动到可滚动对象的特定位置

javascript - MouseDown 时,首先缓慢减少数字,然后增加减少速度(jQuery)