Javascript Chrome扩展:can';无法在后台脚本和内容脚本之间进行消息传递
实际上,我正试图通过使用后台脚本中的Javascript Chrome扩展:can';无法在后台脚本和内容脚本之间进行消息传递,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,实际上,我正试图通过使用后台脚本中的localStorage对象为我的chrome扩展获取持久存储 以下是设置: 我有一个背景脚本和一个内容脚本。内容脚本需要从扩展的localStorage获取/设置数据 但是,我一直在获取要发送到后台脚本的消息 以下是后台脚本中的代码: chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { console.log(sender.tab ? "from a
localStorage
对象为我的chrome扩展获取持久存储
以下是设置:
我有一个背景脚本和一个内容脚本。内容脚本需要从扩展的localStorage
获取/设置数据
但是,我一直在获取要发送到后台脚本的消息
以下是后台脚本中的代码:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
以及内容脚本:
setTimeout(function () {
chrome.runtime.sendMessage({greeting: "hello"}, function(response) {
console.log(response.farewell);
});
}, 5000);
理想情况下,后台脚本应该从内容脚本:[some url]输出,内容脚本应该输出再见
。相反,我得到了以下错误:
Port: Could not establish connection. Receiving end does not exist.
欢迎提供任何帮助/建议
谢谢:)
编辑:清单
{
"manifest_version": 2,
"name": "Helios",
"description": "Helios chrome extension.",
"version": "0.0.1",
"permissions": [
"https://secure.flickr.com/",
"storage"
],
"background": {
"page": "background.html"
},
"browser_action": {
"default_icon": {
"19": "img/icon-19.png",
"38": "img/icon-38.png"
},
"default_title": "Helios",
"default_popup": "popup.html"
},
"content_scripts":[
{
"matches": ["*://*/*"],
"css": ["css/main.css"],
"js": [
"js/vendor/jquery-1.9.1.js",
"js/vendor/handlebars-1.0.0-rc.4.js",
"js/vendor/ember-1.0.0-rc.7.js",
"js/vendor/d3.v3.js",
"js/vendor/socket.io.min.js",
"js/templates.js",
"js/main.js"
],
"run_at": "document_end"
}
],
"web_accessible_resources": [
"img/**",
"fonts/**"
]
}
编辑:Chrome版本
Google Chrome 29.0.1547.65 (Official Build 220622)
OS Mac OS X
Blink 537.36 (@156661)
JavaScript V8 3.19.18.19
Flash 11.8.800.170
User Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.65 Safari/537.36
来自onMessage文档
当事件侦听器返回时,此函数无效,除非
您从事件侦听器返回true,以指示您希望发送
异步响应(这将使消息通道对
另一端(直到调用sendResponse)
所以你的代码应该是
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log(sender.tab ? "from a content script:" + sender.tab.url : "from the extension");
if (request.greeting == "hello") {
sendResponse({farewell: "goodbye"});
return true;
}
});
您的代码应该按原样工作。你能添加清单文件的内容吗?我已经添加了清单。有什么建议吗?是的,我错过了,谢谢。然而,即使返回true,我也会得到完全相同的错误。还有其他想法吗?请澄清,此错误消息是否出现在后台页面控制台中?还是在网页控制台?我强烈感觉这是权限问题。您的权限设置为…flickr…,但内容“匹配”设置为通配符。这是wird问题,但您是否在网页控制台中针对?进行测试。从本质上说,初始消息(来自内容脚本)无法发送。这实际上意味着后台页面在调用时未分配onMessage listener。检查后台页面控制台,页面脚本中可能存在语法错误?