chrome插件开发攻略

当下在各大浏览器中,chrome可能已经成为前端开发者第一选择,不管是从启动速度、载入网页速度,账号系统,webstore,开发调试等,大家使用起来都很顺手,其中webstore中丰富的插件可能是有的人选择它的重要原因之一,今天我们就来了解一下chrome插件相关开发知识。


通过这篇文章,希望大家了解到:

什么是chrome插件

chrome插件结构组成,主要说下manifest.json文件

chrome插件的存储及消息通信是怎么样的


chrome插件是什么

通常来说Chrome插件只是一些HTML,CSS和JavaScript,允许我们通过一些Chrome提供的一些JavaScript API向Chrome添加一些功能。插件基本上是托管在Chrome中的网页,可以访问一些额外的API。


我们可类比chrome插件为公众号里面h5之于微信。微信提供了h5一些native接口比如分享,h5也是使用js/html/css实现,只是微信在上面加上了一层认证。


如果你有兴趣详细了解Chrome插件,可以查看Chrome官方文档深入学习。


chrome插件组成

一个 Chrome 插件其实就是一个配置文件 manifest.json 和一系列 html、css、js、图片文件的集合,所以只要有一点前端基础,写一个简单的 Chrome 插件还是很简单的事情。


manifest.json

首先我们看看manifest.json是什么,有什么作用,下面是一个manifest.json示例:

v2-c6211850c4669ece3fd8d1768e9500ec_b.jpg

chrome浏览器加载插件时通过这文件配置,判断要加什么类型的插件,有什么功能,显示图标是怎么样的,有什么权限,去哪儿检测更新等。接下来主要说下其中几个重要的:

  • permissions
  • ominibox
  • options_page
  • content_scripts
  • browser_action
  • background
  • update_url


权限设置 permissions

首先我们看下permission项,Chrome插件也和普通我们安装Android或者其它程序一样,考虑安全问题,平台会要求开发者提供我们需要操作用户的什么数据,即相应的需要使用权限有哪些,让用户安装时可以知道这插件要使用我的什么权限,有个安装前了解,是不是有安全问题等,所以Chrome插件在配置文件里面有个permission选项,里面列上我们开发者需要使用权限,然后再后来的开发中才能使用相应的功能。


比如我们想读取用户的cookie(当然这很危险⚠️了),我们需要加上cookies在permission列表里面。比如我们需要用户右击显示我们的菜单,我们需要contextMenus


当然对于我们普通用户不能随便装一些不安全的插件,一是我们在安装时可以看到我们要装的插件需要哪些权限,如果有比如危险的,比如cookies/webRequest等,我们就要注意一下了,除了在安装时可以看到,我们在安装好后在chrome://extensions插件列表页面相应的插件项里面有个"permission"荐,点击也能看到。


安装时查看:

v2-affe0a26d2eb96260e210f4a90a58cb4_b.jpg

安装完查看:

v2-4c8c620af6975ed5c96161e0d44aec94_b.jpg


地址栏交互,omnibox

v2-561a8672a8192fe9f84d84fbe782e80b_b.jpg

我们也可以在chrome://settings/searchEngins里面看到,除了插件注册的一些方式,通用搜索引擎也有注册,比如google/bing等

插件配置页 options_page

下面是Google translate插件options_page:

v2-9588e53ed5777c1fe87b8000e83233c7_b.jpg

看了图大家应该就知道,这相当于是配置页,允许用户自定义插件的行为,我们提供一个选项页面给用户设置一些常用的操作选项,然后存起来,然后给插件使用。


比如我们可以在options page的实现用户设置收藏的颜色:

v2-41c468c27c5ef4401e3fef8dbe3b95be_b.jpg

v2-3662600cdfc264d8646c3e3123d5d651_b.jpg

v2-582690a71c4349ea93313757912e7307_b.jpg


页面操作 page_action

设置此选项后的插件图标会出现在地址栏的右边,browser action同page action功能大体相同,设置popup,获取页面信息,设置页信息等

chrome://newtab/ (二维码自动识别)

v2-19b6eca9c8b24428f938295c122cf461_b.jpg

v2-becca61a5de4eb83f8947204ad174222_b.jpg


browser action和page action的不同点在于,这两个只能设置一个,还有适用场景不一样,我们看下browser action的开发注意项:

  • browser action用于对大多数页面有意义的功能。
  • 对于只针对部分页面的操作,推荐使用page action。
  • 请使用充分利用16x16倾斜空间的大型彩色图标。浏览器动作图标看起来应该比页面动作图标更大更重。
  • 不要试图模仿Google Chrome的单色菜单图标。这不适合主题,无论如何,插件应该脱颖而出。
  • 请使用Alpha透明度为您的图标添加柔化边缘。由于许多人使用主题,因此您的图标应该在各种背景颜色上看起来不错。
  • 不要经常动画你的图标


常驻浏览器功能, background

此选设置的是插件加载后执行的代码,只执行一次,在这里面我们会

基于插件模块可以通过chrome.extension.getBackgroundPage()调用background中的方法,比如在options_page或者browser_action或者page_action中


页面注入, content_scripts

content scripts从名字我们就可以看出,这是和页面内容有关系的,这类设置的js/css会在页面加载后注入到页面里面,然后我们就可以在content scripts操作网页中的dom或者设置css样式了,content scripts也分为两种:
1.manifest.json里面content_scripts设置的js/css
2.通过api中的chrome.tabs.executeScript注入脚


本到相应网页,这api需要权限"activeTab"。

比如我们想安装我们插件后在打开网页时,我们点击页面中id为'blablabla'的按钮弹框提示:

v2-ae534309f4290f7760ebde5458b27fa5_b.jpg

当然我们也可以使用chrome提供的一些内置api,注意由于是content
script,我们不能在里面使用插件的方法,比如background的方法(当然我们可以通过后面说的通信方法实现):

chrome.extension

  • getURL
  • inIncognitoContext
  • lastError
  • onRequest
  • sendRequest)

chrome.i18n

chrome.runtime

  • connect
  • getManifest
  • getURL
  • id
  • onConnect
  • onMessage
  • sendMessage)

chrome.storage


插件的更新 update_url

浏览器会一定时间间去文章manifest.json里面的update_url里面的xml,然后更新相应内容进行更新。xml内容示例如下:

v2-05d133001b420cd09d24dbf999e77129_b.jpg

在网上有文章看到源码里面是设置5小时自动更新插件,当然也可以在chrome://extensions点击按钮手动更新


Chrome插件各模块之单的数据通信

content scripts与插件通信

v2-a11f36073172c287504c5e2f2b3aa6ef_b.jpg


content scripts与插件长连接通信

有时,持续时间长于单个请求和响应的对话很有用。在这种情况下,可以使用runtime.connect从content scripts打开一个port连接到插件页面。该port可以设置具有名称,以便区分不同类型的连接。以后就可能使用此port改送和接收消息。

v2-c570489c19c31e00ee56a8245b105630_b.jpg


插件间通信

有时我们如果有多个插件,有时会在多个插件间通信,和上面插件内通信类似,只是加个后缀即可。

插件A中设置接受连接代码

v2-95259622d68ee9e597ea6b92138f216e_b.jpg


插件B中向插件A发消息

v2-d5a384223121879cf89e246041a97c4e_b.jpg


数据怎么存储

既然Chrome插件和普通网页一样,当然常用的网页存储方案,比如cookie,localStorage, sessionStorage等都可用,当然如前面提到,我们要在manifest中加入相应的权限并在相应的页面操作。


另外chrome还提供了一套API,chrome.storage,然后再分为两类,chrome.storage.local是只把数据保存在本地,另一种方法是chrome.storage.sync,这方法会在chrome自己的用户体系里面把用户保存的插件信息进行服务器同步,用户在其它chrome上登录时能同步其它地方登录的插件的数据。这两种方法都是异步的,示例如:

v2-523eac75b1fa4958fdc4fb71fba302de_b.jpg


总结chrome插件的概览图

v2-0447d77fe329ffb31dce62cf32401108_b.jpg


滴滴云官网:didiyun.com/?

滴滴云疯狂双十一,服务器最低35折起

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值