Google Chrome扩展程序:端口:无法建立连接。接收端不存在

时间:2013-11-01 09:50:23

标签: javascript google-chrome google-chrome-extension

我一直在寻找答案近一周了,但是看了所有的stackoverflow项目,我似乎无法找到适合我的解决方案。

我遇到的错误是:

Port: Could not establish connection. Receiving end does not exist. lastError:30 set   lastError:30 dispatchOnDisconnect messaging:277

文件夹布局:

img
   developer_icon.png
js
   sidebar.js
   main.js
   jquery-2.0.3.js
manifest.json

我的manifest.json文件看起来像这样(它是版本2):`

"browser_action": {
  "default_icon": "./img/developer_icon.png"
},

"content_scripts": [
{      
  "matches": ["*://*/*"],
  "js": ["./js/sidebar.js"],   
  "run_at": "document_end"
}
],

"background" : {
    "scripts" : ["./js/main.js","./js/jquery-2.0.3.js"] 
},

我想处理用户点击扩展图标,以便我可以在现有网站中注入侧边栏(因为我想开发的扩展需要大量空间)。所以在main.js中:

chrome.browserAction.onClicked.addListener(function(tab) {          
        chrome.tabs.getSelected(null, function(tab){        
            chrome.tabs.sendMessage(
                //Selected tab id
                tab.id,                         
                //Params inside a object data
                {callFunction: "toggleSidebar"}, 
                //Optional callback function
                function(response) {
                    console.log(response);
                }
            );
        });
    });

并在sidebar.js中:

chrome.runtime.onMessage.addListener(function(req,sender,sendResponse){
    console.log("sidebar handling request");
    toggleSidebar();
});

但由于错误,我无法在控制台中看到console.log。有人知道我做错了吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

只有在遇到类似问题时登陆此页面的任何人:

OP的代码确实按预期工作!

一些小的评论:

  1. chrome.tabs.sendMessage 的回调是可选的,因此如果您不打算在接收端调用它,则无需定义一个。即以下是reduntant:

    ...
    //Optional callback function
    function(response) {
    console.log(response);
    }

  2. chrome.tabs.getSelected 已弃用,不应使用。请改用 chrome.tabs.query

  3. 在这种特殊情况下,对 chrome.tabs.getSelected 的调用是可还原的,因为 chrome.browserAction.onClicked 回调会将活动标签作为参数传递