1

我一直在寻找答案将近一个星期,但是在阅读了所有 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。有人知道我做错了什么吗?

提前致谢!

4

1 回答 1

0

仅适用于在遇到类似问题时登陆此页面的任何人:

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

一些小评论:

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

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

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

  3. 在这种特殊情况下,对chrome.tabs.getSelected的调用是多余的,因为chrome.browserAction.onClicked回调将活动选项卡作为参数传递。

于 2013-11-01T11:09:18.370 回答