应用场景:网站嵌入 content_main.js文件 需要与background.js相互通信回调
//content_main.js
chrome.runtime.sendMessage({addurl:_url,adddata:data,msg:"contentRequest"}, function(response) {
if(response.status){
...
}else{
...
}
});
//background.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.msg=="contentRequest"){
//ajax settimeout 等一系列异步操作时发现content_main response接不到回调值 undefined
ajax({
type:'post',
// contentType: 'application/x-www-form-urlencoded',
contentType: 'application/json; charset=utf-8',
url:request.addurl,
// data:{'documents':bibliographic_data},
data:request.adddata,
success:function(w){
if(w.code==200){
sendResponse({status:1,msg:"保存成功!"});
}else{
sendResponse({status:0,msg:"保存失败,错误代码1001"});
}
return true;
},
error: function(xhr,info,e,){
sendResponse({status:0,msg:"保存失败,错误代码1002"});
},
})
return true;// 原因在此 完美解决
}
});
注:使用嵌入式开发有个弊端即在https网站嵌入发异步请求即在content_main中发后台请求会若服务为http服务会发生请求被拒绝问题,上述案例也完美的解决该问题,仅供参考具体以实际开发情况为主。