我正在尝试从content.js
向background.js
发送一个网址,以便在那里发出ajax
请求。
在content.js
我有以下代码。顺便说一句,这条从content.js发送到background.js的消息有效,我已经测试过了。但问题是我没有得到background.js的回复。我还测试了ajax
请求是否成功。
$(document).on('click', '.readmore a', function(event) {
event.preventDefault();
var link = $(this).attr('href');
chrome.runtime.sendMessage(extractFacebookUrl(link),function(response){
console.log(response); //nothing get consoled out here.
});
});

在background.js
中,我有以下代码。
chrome.runtime.onMessage.addListener(function(url, sender, response){
$.get(url, function(data){
obj = {'data' : data, 'link' : url}
//alert(data); //This alert shows that ajax request was successful.
response(obj); //But this returns nothing to content.js. Why?
});
});

答案 0 :(得分:1)
从https://developer.chrome.com/extensions/runtime#event-onMessage关于 sendResponse 功能。
[...]当事件侦听器返回时,此函数变为无效,除非您从事件侦听器返回true以指示您希望异步发送响应(这将使消息通道保持打开状态)到另一端,直到调用sendResponse)。
您需要从附加到chrome.runtime.onMessage的事件处理程序返回true。
background.js
中的代码如下所示:
chrome.runtime.onMessage.addListener(function(url, sender, response){
$.get(url, function(data) {
response({'data' : data, 'link' : url});
});
return true;
});