博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
chrome插件中遇到的坑(一)
阅读量:4992 次
发布时间:2019-06-12

本文共 1090 字,大约阅读时间需要 3 分钟。

简单说,懂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

你可能感兴趣的文章
【投票】你心目中的Excel催化剂价值有多大(附主流国内外收费插件供参考)?...
查看>>
算法复习——半平面交(bzoj2618凸多边形)
查看>>
关于在Intellij Idea中使用JSTL标签库报错的问题
查看>>
如何用自己电脑做服务器,绑定域名建一个个人网站
查看>>
.ds_store是什么文件
查看>>
递归C++
查看>>
POJ 1751 Highways(最小生成树&Prim)题解
查看>>
linux 安装openssh-server, openssh-client
查看>>
Java继承的基本概念及其限制 总结
查看>>
RF1001: 各浏览器对 '@font-face' 规则支持的字体格式不同,IE 支持 EOT 字体,Firefox Safari Opera 支持 TrueType 等字体...
查看>>
Socket 学习(三)
查看>>
题解 CF43B 【Letter】
查看>>
CommandName and CommandArgument
查看>>
[z]FNV哈希算法
查看>>
通过层序和中序遍历序列重建二叉树
查看>>
【Git】git clone与git pull区别
查看>>
【SVN】SVN的trunk、branches、tag的使用以及分支的概念
查看>>
JS闭包理解
查看>>
整数对题目
查看>>
php设计模式-观察者模式
查看>>