声明:本篇文章借鉴地址:Chrome插件
一、Chrome API简介
严格来讲,我们正在说的东西应该叫Chrome扩展(Chrome Extension),Chrome插件是一个用Web技术开发、用来增强浏览器功能的软件,它其实就是一个由HTML、CSS、JS、图片等资源组成的一个.crx后缀的压缩包。搜狗浏览器有类似于Chrome扩展的一套,不同的是,生成的是.sext后缀的压缩包。
二、ChromeAPI的作用
Chrome扩展提供了相当多的接口,可以轻松增强浏览器的功能,比如:书签控制、下载控制、窗口控制、标签控制、网络请求控制、各类事件监听、自定义原生菜单、完善的通信机制等。
三、Chrome插件核心介绍
manifest.json文件
(1)manifest.json文件是Chrome扩展最重要也是必不可少的文件,用来编写所有和插件相关的配置,必须放在根目录。
(2)在manifest.json文件中,manifest_version、name、version
是必不可少的配置项,description、icons
是推荐的配置项。
(3)其他常见的配置项,见https://developer.chrome.com/extensions/manifest
(4)下面是一些常见的配置项:
{
// 清单文件的版本,这个必须写,而且必须是2
"manifest_version": 2,
// 插件的名称
"name": "demo",
// 插件的版本
"version": "1.0.0",
// 插件描述
"description": "简单的Chrome扩展demo",
// 图标,一般偷懒全部用一个尺寸的也没问题
"icons":
{
"16": "img/icon.png",
"48": "img/icon.png",
"128": "img/icon.png"
},
// 会一直常驻的后台JS或后台页面
"background":
{
// 2种指定方式,如果指定JS,那么会自动生成一个背景页
"page": "background.html"
//"scripts": ["js/background.js"]
},
// 浏览器右上角图标设置,browser_action、page_action、app必须三选一
"browser_action":
{
"default_icon": "img/icon.png",
// 图标悬停时的标题,可选
"default_title": "这是一个示例Chrome插件",
"default_popup": "popup.html"
},
// 当某些特定页面打开才显示的图标
/*"page_action":
{
"default_icon": "img/icon.png",
"default_title": "我是pageAction",
"default_popup": "popup.html"
content-scripts
(1)content-scripts是Chrome插件向页面注入脚本的一种形式(虽然名为script,其实还可以包括css的);
(2)我们可以通过配置向指定页面注入JS和CSS,最常见的比如:广告屏蔽、页面CSS定制等。
(3)可参考:
{
// 需要直接注入页面的JS
"content_scripts":
[
{
//"matches": ["http://*/*", "https://*/*"],
// "<all_urls>" 表示匹配所有地址
"matches": ["<all_urls>"],
// 多个JS按顺序注入
"js": ["js/jquery-1.8.3.js", "js/content-script.js"],
// JS的注入可以随便一点,但是CSS的注意就要千万小心了,因为一不小心就可能影响全局样式
"css": ["css/custom.css"],
// 代码注入的时间,可选值: "document_start", "document_end", or "document_idle",最后一个表示页面空闲时,默认document_idle
"run_at": "document_start"
}
],
}
background
(1)background,是一个常驻的页面,它的生命周期是插件中所有类型页面中最长的,它随着浏览器的打开而打开,关闭而关闭,通常把需要一直运行的、启动就运行的、全局的代码放在background里面;
(2)background的权限非常高,几乎可以调用所有的Chrome扩展API(除了devtools),而且它可以无限制跨域,也就是可以跨域访问任何网站。
(3)background可以通过page指定网页,也可以通过scripts直接指定JS,Chrome会自动为这个JS生成一个默认的网页:
{
// 会一直常驻的后台JS或后台页面
"background":
{
// 2种指定方式,如果指定JS,那么会自动生成一个背景页
"page": "background.html"
//"scripts": ["js/background.js"]
},
}
(4)需要特别说明的是,虽然可以通过chrome-extension://xxx/background.html直接打开后台页,但是打开的后台页和真正一直在后台运行的那个页面不是同一个。换句话说,你可以打开无数个background.html,但是真正在后台常驻的只有一个,而且这个你永远看不到它的界面,只能调试它的代码。
event-pages
(1)鉴于background生命周期太长,长时间挂载后台可能会影响性能,所以Google又弄一个event-pages,在配置文件上,它与background的唯一区别就是多了一个persistent参数:
{
"background":
{
"scripts": ["event-page.js"],
"persistent": false
},
}
(2)它的生命周期是:在需要时加载,在空闲时关闭。什么叫需要时呢?比如第一次安装、插件更新、有content-script向它发送消息等。
popup
(1)popup是点击browser_action或者page_action图标时打开的一个小窗口网页,焦点离开网页就立即关闭,一般用来做一些临时性的交互。
(2)popup可以包含任意你想要的HTML内容,并且会自适应大小。可以通过default_popup字段来指定popup页面,也可以调用setPopup()方法。配置方式如下:
{
"browser_action":
{
"default_icon": "img/icon.png",
// 图标悬停时的标题,可选
"default_title": "这是一个示例Chrome插件",
"default_popup": "popup.html"
}
}
(3)由于单击图标打开popup,焦点离开又立即关闭,所以popup页面的生命周期一般很短,需要长时间运行的代码千万不要写在popup里面。
(4)在权限上,它和background非常类似,它们之间最大的不同是生命周期的不同。
下次再介绍如何调用ChromeAPI。