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

Google chrome extension 在content.js和background.js之间发送消息失败,google-chrome-extension,Google Chrome Extension,我正试图从content.js发送一个url到background.js,在那里发出ajax请求 在content.js中,我有以下代码。顺便说一句,这个消息从content.js发送到background.js是有效的,我已经测试过了。但问题是background.js没有回复我。我还测试了ajax请求是否成功 $(文档).on('click','readmore a',函数(事件){ event.preventDefault(); var link=$(this.attr('href');

我正试图从
content.js
发送一个url到
background.js
,在那里发出
ajax
请求

content.js
中,我有以下代码。顺便说一句,这个消息从content.js发送到background.js是有效的,我已经测试过了。但问题是background.js没有回复我。我还测试了
ajax
请求是否成功

$(文档).on('click','readmore a',函数(事件){
event.preventDefault();
var link=$(this.attr('href');
chrome.runtime.sendMessage(extractFacebookUrl(链接)、函数(响应){
console.log(response);//这里没有任何东西可以得到安慰。
});
});来自关于发送响应功能

[…]当事件侦听器返回时,此函数将无效,除非您从事件侦听器返回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;
});

你救了我一天!我已经坐了好几个小时了:我想用黑体字解释一下我的情况吗?我不太明白。@Zip取决于你,你知道异步javascript是如何工作的吗?但原则上,Chrome需要在侦听器停止执行之前决定如何处理请求,这样发送者就会收到消息已处理的通知,以防您不想返回任何内容。让Chrome现在“我将使用
响应
但稍后,保留行”的唯一方法是返回true,否则它将回复发件人“Ok,received,no data for response”。顺便说一句,“代码片段”仅用于完整的代码。Chrome扩展使用ChromeAPI,因此并不完整。这使得这个片段毫无用处。