我正在尝试使用chrome扩展程序。我的目标是从后台脚本向注入的脚本发送消息,让注入的脚本返回结果。
代码如下:
background.js
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab){
chrome.tabs.executeScript(tabId, {'file': "content.js"},
function(){
chrome.tabs.sendMessage(tabId, {msg: 'test'},
function(response){
console.log(response);
}
);
return true;
}
);
});
content.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
sendResponse('test message');
return true;
}
);
我收到错误消息
Could not send response: The chrome.runtime.onMessage listener must return true if you want to send a response after the listener returns
在sendResponse
content.js
时
我已经从听众那里回复了......混淆了吗? 我错过了一些明显的东西吗?
答案 0 :(得分:0)
我认为我的问题已由
修复chrome.tabs.sendMessage(tabId, {action: 'test'},
注意,我在上述问题中错误地使用了msg
而不是action
。
另外,我不使用第三个参数sendResponse来避免全双工通信 我只是将内容脚本中的另一条消息发回背景页面。
从内容脚本中,使用以下命令将消息发送到后台页面:
function SendMessageToBackgroundPage(data)
{
chrome.runtime.sendMessage({
action: 'kungfu',
source: 'panda'
});
}
使用以下方法在背景页面中抓取:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
switch (request.action) {
case 'kungfu': alert(request.source);
}
});