从background.js发送到contentScript.js
Sending from background.js to contentScript.js
我做了文档中的操作,但在后台页面中说Cannot read property 'farewell' of undefined
时出错。
我的背景.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
console.log('ytr');
});
});
发送该消息是因为我的console.log("测试")已打印出来。
我的contentScript.js看起来像这个
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"});
});
我确实在manifest.json中声明了权限选项卡和activeTab。我还错过了什么?
如果response
未定义(这就是"无法读取未定义的属性…"的含义),则发送消息时出错。
在这种情况下,Chrome使用response == undefined
调用回调并设置chrome.runtime.lastError
。
您需要检查错误值:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
if(chrome.runtime.lastError) {
console.error(chrome.runtime.lastError.message);
return;
}
console.log(response.farewell);
console.log('ytr');
});
});
我敢打赌,你的内容脚本不知怎么没有被正确地注入。请参阅此答案以获取一些提示。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 在 iFrame 中注入 JS 文件,通过 Google chrome 扩展名中的 ContentScript 进行
- 使用Pagemod向ContentScript添加一些JS
- 从background.js发送到contentScript.js
- 与contentscript中注入的ember.js冲突's镀铬加长件
- 消息从网页传递到contentscript.js在chrome扩展
- 如何通过一个数组对象从contentscript.js弹出.html
- Chrome扩展赢得't识别#(contentscript.js匹配)之后的URL部分
- 插入代码从Contentscript.js (Chrome扩展)