chrome插件中遇到的坑(一)

简单说,懂chrome插件开发的人都知道,chrome插件主要有三层(姑且这么称谓)。这三层经纬可谓明确,可以从功能和权限的角度去理解他们:

1、background层,chrome插件底层,控制整个chrome插件的大脑,具有最高权限;

2、content层,content-script脚本工作平台,本质上是chrome插件脚本注入层,权限最低只能影响页面DOM,不能跨域操作,但是可以通过chrome.runtime.sendMessage与background层交互;

3、popup/option层,UI交互层,权限中等,可以直接使用background的实例对象,也可以通过消息与content层交互。

 

实际开发中,经常会遇到在content层获取数据,提交到后台server的情况,后台server与content页面存在跨域问题。

chrome插件中解决跨域问题是比较简单,当然,可以直接在content脚本中使用jsonp的方式跨域,也可以将需要提交的数据发送给background层,由background提交后台服务。

我采取的方式是后者,通过消息与background通信,坑儿也是在发送消息的时候碰到的。

发送消息:

chrome.runtime.sendMessage({data: "hello world!"}, function(response) {
  console.log(response);
});

坑儿:总是报错Uncaught Error: chrome.runtime.connect() called from a webpage must specify an Extension ID (string) for its first argument

后来,通过测试发现是我调用chrome.runtime.sendMessage的时机问题,不要在content脚本注入的时候就调用该函数,换句话说就是:要在页面加载完毕时调用该方法:

$(function(){

  chrome.runtime.sendMessage({data: "hello world!"}, function(response) {
    console.log(response);
  });

});

 

这是搞原型测试时,发现的坑,一些函数的调用(时机)没有结合业务,所以,实际结合业务开发中可能自然就越过了该坑儿,但是,还是留个印记吧。

 

转载于:https://www.cnblogs.com/mythings/p/5941751.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值