在content.js和background.js之间发送消息失败

时间:2015-11-09 17:40:23

标签: google-chrome-extension

我正在尝试从content.jsbackground.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?
    });
});




1 个答案:

答案 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;
});