我一直在寻找答案近一周了,但是看了所有的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。有人知道我做错了吗?
提前致谢!
答案 0 :(得分:0)
只有在遇到类似问题时登陆此页面的任何人:
OP的代码确实按预期工作!
一些小的评论:
chrome.tabs.sendMessage 的回调是可选的,因此如果您不打算在接收端调用它,则无需定义一个。即以下是reduntant:
...
//Optional callback function
function(response) {
console.log(response);
}
chrome.tabs.getSelected 已弃用,不应使用。请改用 chrome.tabs.query 。
在这种特殊情况下,对 chrome.tabs.getSelected 的调用是可还原的,因为 chrome.browserAction.onClicked 回调会将活动标签作为参数传递