Chrome扩展开发数据通信问题

应用场景:网站嵌入 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服务会发生请求被拒绝问题,上述案例也完美的解决该问题,仅供参考具体以实际开发情况为主。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,019评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,860评论 18 139
  • chrome扩展开发入门教程 最近在开发chrome插件,看到一篇非常适合入门的教程,特记录一下 注:转载 本文首...
    谢大见阅读 6,446评论 1 25
  • 盂兰解倒悬,普渡众幽魂。 水灯明道路,共佑世上人。
    心悯居士阅读 240评论 0 3
  • 在知识匮乏的时代、非终身学习的年代,学肯定比不学好。 在今天知识爆炸、终身学习的时代,要比的不是学不学,而是认知效...
    霍霍小哥阅读 630评论 0 10