如何开发Chrome扩展程序

如何开发Chrome扩展程序,第1张

开始

为了着手创建你的扩展程序,你只需要为你的扩展创建一个文件夹。程序所必须的文件只有manifest.json.,不过也推荐准备一些图片用作图标,和至少一个JavaScript以提供功能。一般来说还会包含HTML文档、样式表、图片等等其他的资源。

Manifest文件

每个扩展都必须在其根目录下包含一个manifest.json文件。

这个文件里面声明了扩展的名称、版本、权限、设置选项和其他的一些和扩展相关的元数据。Manifest v1早在Chrome 18便已被弃用,而且会根据这个时间表逐渐淘汰使用Manifest v1的扩展。如果你在参考一些旧扩展的Manifest文件的话,请确认添加"manifest_version": 2.

Google发布的Manifest v2中支持的域

后台页

大多数扩展都会在其manfiest.json文件内有这样的内容:

1

2

3

4

5

{

"background": {

"scripts": ["index.js", "other.js"]

}

}

这一段代码指定了两个需要被加载而且要保持在后台运行的脚本,这些脚本会在扩展的后台页运行。后台页是一个在扩展的进程中生成并运行的页面,存在时间会和扩展的生命周期等长。后台页可用来作为扩展的其他界面的控制器,用来维护某个状态或者保持某些活动。如果你需要用后台页来声明一些标记来用,可以把一个HTML文件名指定给page选项。

事件页

后台页会从扩展被加载的时候被装载,而且会一直留在内存里。这是因为如果有些状态需要蔽慎盯被长时间维孝扮护,或者需要被扩展的其他部分访问。但是如果你没有这个需求,那么应该尽可能的使用事件页。事件页其实只是相当于一个包含了”persistent”: false条目的后台页,这一行语句告诉Chrome可以不需要把后台页保留在内存里。相对来说,事件页也会在最开始被装载,但是一旦指定的脚本运行完毕,事件页便会从内存卸载,而且宏和会在需要的时候被再次加载(比如用来回应某些 *** 作)。

以上便是在为扩展添加功能之前所需要知道的。

交互

利用Google提供的大量API,你的扩展与浏览器交互或者为用户提供功能都变得方便。

chrome.* APIs

Chrome的程序和扩展程序都非常喜欢调用chrome.* APIs,这些API可以让你通过不同的方式来 *** 控浏览器,API通常会在后台脚本里面被调用,这是我找到的一些常用API:

chrome.tabs 标签页:新建、刷新、关闭、访问和 *** 控标签页

chrome.history 历史:访问用户浏览历史

chrome.bookmarks 书签:添加、编辑、移除和搜索用户书签

chrome.events 事件:监听或者管理浏览器发生的事件

chrome.commands 命令:添加或者改变键盘命令

chrome.contextMenus 右键:添加条目到右键下文菜单

chrome.omnibox 多功能框(地址栏):添加多功能框关键字,使用户可以向扩展发送指令或者激活扩展

其他API

Chrome程序和扩展程序通常也会用到其他的API,包括如本地存储、地理位置、缓存、画布等新型的HTML5 API。你也可以用普通的JavaScript或者webkit API来实现。

声明权限

有些Chrome API的功能必须要在manifest.json文件中声明相关权限才能被调用,通过在permissions 域中把值设成相应权限名称,或者是通识符组成的数组。

1

2

3

4

5

6

7

8

{

"permissions": [

"contextMenus",

"tabs",

"https://google.com/*",

"https://developer.mozilla.org/*"

]

}

在这一段声明代码中,数组中的头两个字符串是分别用来为chrome.contextMenus和chrome.tabs 的API授权的,最后的两个字符串则是用来匹配以 https://google.com/ 和 https://developer.mozilla.org/ 开头的地址。

用户界面

Chrome扩展的用户界面有着严格的限制,但是根据扩展的需要却可以有不同形式的界面。

浏览器按钮[a]

浏览器按钮允许你在右上角放置一个的16 x 16像素的图标,如果扩展应用的界面是全局的,而不是针对某个页面,那就应该使用浏览器 *** 作。如果要使用浏览器按钮,你必须在manifest.json中的browser_action域中做如下声明:

1

2

3

4

5

6

7

8

9

10

{

"browser_action": {

"default_icon": {

"19": "images/icon19.png",

"38": "images/icon38.png"

},

"default_title": "tooltip text here",

"default_popup": "popup.html"

}

}

一个浏览器按钮可以有一个图标、提示、文字标记和一个d出内容,文字标记可以将极少的文字(4字符)动态的覆盖在浏览器 *** 作的图标上,你也可以通过chrome.browserActionAPI来对浏览器按钮相关的事件做出反应。

页面按钮

页面按钮允许你在多功能栏(地址栏)右边添加一个按钮,其实他和浏览器按钮很相似,区别之处在于页面按钮是专门用来处理某些指定的页面的。页面按钮必须在manfiest.json中声明, page_action域的使用和浏览器按钮一样。页面按钮可以通过chrome.pageAction API控制,可以在不同的标签页中灵活的显示或者隐藏。页面按钮也可以设置图标、提示和d出内容,和浏览器按钮不同的是其没有文字标记功能。

右键菜单

右键菜单是另一个提供用户界面,方便用户和扩展交互的方式。Chrome的右键菜单通过右键激活,但根据激活内容的变化,菜单内容也会做相应改变。

chrome.contextMenusAPI允许你向为不同内容激活的右键菜单添加项目,若要使用此API,则在manifest.json文件中声明相应的contextMenus权限。

目前可用的激活内容有:

all, page, frame, selection, link, editable,image, video, audio

对应:所有内容、页面、框架、选择、链接、可编辑、图像、视频、音频,以下这个例子需要contextMenus 和tabs权限,他可以使扩展为右键菜单添加一个根项目,然后添加一个子菜单,用来复制当前的页面到一个新选项卡。[b]

1

2

3

4

5

6

7

8

9

10

11

12

13

var root = chrome.contextMenus.create({

title: 'MyExtension',

contexts: ['page']

}, function () {

var subMenu = chrome.contextMenus.create({

title: 'Duplicate Tab'

contexts: ['page'],

parentId: root,

onclick: function (evt) {

chrome.tabs.create({ url: evt.pageUrl })

}

})

})

多功能框

Chrome把地址栏/搜索栏称为多功能框,通过chrome.omnibox API,他可以让扩展有另一个界面。通过API 可以设置一个特定的激活字符串,当这个字符串被键入多功能框时扩展便可以对其做出反应。在manifest.json中做如下声明:

1

2

3

4

5

{

"omnibox": {

"keyword": "ext-"

}

}

这部分代码会把ext-作为激活字符串,当用户键入ext-并按下SPACE键或者TAB键时扩展会被激活。激活字符串必须通过manifest.json文件声明,故也不能通过JavaScript来更改。用户可以通过右键单击多功能框—–修改搜索引擎来更改。激活字符串是大小写敏感的,同时想为一个扩展声明多个激活字符串也是不可以的。

chrome.omnibox API可以让你添加激活字符串被键入之后的修改或者输入的事件处理器。

选项页面

选项页面是一个的常见的用户界面,在chrome://extensions里可以通过单击扩展右边的选项按钮来打开。通常这个页面会和存储API结合使用,以用来在计算机上为用户保存设置。而使用脚本通过chrome.tabsAPI来打开选项页面也是可以的。

页面重载

页面重载允许你完全替代一个以下指定页面(一个扩展程序只能重载一个页面)

书签管理器

通过访问chrome://bookmarks或者Chrome菜单打开的页面

历史

通过访问chrome://history或者Chrome菜单打开的页面

新选项卡

通过访问chrome://newtab或者新建选项卡出现的页面

这些被替换的页面必须在manifest.json文件中如下声明chrome_url_overrides域:

1

2

3

4

5

{

"chrome_url_overrides": {

"bookmarks": "newBookmarkManager.html"

}

}

内容脚本

内容脚本是和你的扩展有关,在网页中运行的脚本。这个脚本可以让你访问页面里相应的DOM元素,你可以像这样在manifest.json里通过指定content_scripts域定义一个内容脚本数组:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

{

"content_scripts": [

{

"matches": ["http://www.google.com/*"],

"css": ["custom-google-styles.css"],

"js": ["custom-google-script-1.js", "custom-google-script-2.js"]

},

{

"matches": ["http://*"],

"css": ["global-styles.css"],

"js": ["global-script.js"]

}

]

}

你也可以用通过chrome.tabs API以动态的把JavaScript或者CSS注入网页。

内容脚本有以下限制:

不能使用chrome.* API (chrome.extension的部分除外)

不能使用由扩展脚本定义的变量或函数

不能使用由网页所定义的变量或函数

不能使用由其他内容脚本定义的变量或函数

内容脚本可以通过消息传递间接的使用chrome.* API,或者是和扩展脚本交互。

chrome作为前端开发的标准浏览器,拥有强大的功能,其中chrome插件就其中非常有用的工具!作为一名前端,开发一款好用的chrome插件也是一件非常有成就感的事!下面我就简单叙述一下如何开发!

1、一个简单的二维码插件目录,核心文件manifest.json,以下简称清单文件,这个文件是必须有的,其余的html、js、css、img等就根据需要来创建就可以了。

2、manifest.json介绍

必须配置的字段、以及常用的配置字段

defalut_popup必须指定html文件,另外html内不允许内联誉陆js(inlinejavascript),插件的开发和普通web开发是一样的,都是用html、js、css。除此之外扩展还提供很多强大的api,帮助我们丰富浏览器的扩展功能。

3、常用APIchrome.tabschrome.runtime可以监听和响应扩展生命周期的事件chrome.webRequestchrome.windowchrome.storagechrome.contextMenuschrome.devtoolschrome.extension

使用大多数的api要声明权限的,因为js中使用chromeAPI,所以示例中在permissions这个字段设置了tabs。

当然,清单的配置远不止这些,随着功能的强大,会看到更多的字段。

/extensions/manifest

4、代码编写完成后,打开扩展的界面,chrome://extensions.,勾选开发者模式,点击‘老隐已解压的扩展程序’,选择开发好的文件夹,这样就成功添加上了扩展。

5、调试

示例中,扩展功能界面是侍虚厅以d窗形式展示,点击图标,右键审查元素即可。

6、打包与发布登录chrome应用商店/webstore/developer/dashboard/点击进去开发者信息中心添加压缩后的zip包按提示添加必填的信息,发布即可

语言无关类

*** 作系统

鸟哥的Linux私房菜 (简体)

Linux 系统高级编程

The Linux Command Line (中英文版)

Linux 设备驱动 (第三版)

深入分析Linux内核源码

UNIX TOOLBOX

Docker中文指南

Docker —— 从入门到实践

FreeRADIUS新手入门

Mac 开发配置手册

FreeBSD 使用手册

Linux 命令行(中文版)

智能系统

一步步搭建物联网系统

web服务器

Nginx开发从入门到精通 (淘宝团队出品)

版本控制

Git教程 (本文由  @廖雪峰 创作,如果觉得本教程对您有帮助,可以去  iTunes 购买)

git – 简易指南

猴子都能懂的GIT入门

Git 参考手册

Pro Git

Git Magic

GotGitHub

Git Community Book 中文版

Mercurial 使用教程

HgInit (中文版)

沉浸式学 Git

Git-Cheat-Sheet (感谢 @flyhigher139 翻译了中文版)

GitHub秘籍

NoSQL

NoSQL数据库笔谈 (PDF)

Redis 设计与实现

Redis 命令参考

带有详细注释的 Redis 3.0 代码

带有详细注释的 Redis 2.6 代码

The Little MongoDB Book

The Little Redis Book

Neo4j 简体中文手册 v1.8

Neo4j .rb 中文资源

MySQL

MySQL索引背后的数据结构及算法原理

项目相关

持续集成(第二版) (译言网)

让开发自动化系列专栏

追求代码质量

selenium 中文文档

Joel谈软件

约耳谈软体(Joel on Software)

Web

关于浏览器和网络的 20 项须知

前端知识体系

浏览器开发工具的秘密

Chrome 开发者工具中文手册

Chrome扩展开发文档

Grunt中文文档

移动Web前端知识库

正则表达式30分钟入门教程

前端开发体系建设日记

移动前端开发收藏夹

JSON风格指南

HTTP 接口设计指北

前端资源分享(一)

前端资源分享(二)

前端代码规范 及 最佳实践

w3school教程整理

大数据

大数据/数据挖掘/推荐系统/机器学习相关资源

编程艺术

程序员编程艺术

每个程序员都应该了解的内存知识(译)【第一部分】

取悦的工序:如何理解游戏 (豆瓣阅读,免费书籍)

其他

OpenWrt智能、自动、透明翻墙路由器教程

语言相关类 AWK

awk程序设计语言

C/C++

C++ 并发编程指南 (@傅海平ICT)

Linux C编程一站式学陪袭枯习 (宋劲杉, 北京亚嵌教育研究中心)

CGDB中文手册

100个gdb小技巧

100个gcc小技巧禅碰

ZMQ 指南

How to Think Like a Computer Scientist (中英文版)

跟我一起写Makefile(PDF)

GNU make中文手册

GNU make 指南

Google C++ 风格指南

C/C++ Primer (by @andycai)

简单易懂的C魔法

Cmake 实践 (PDF版)

C++ FAQ LITE(中文版)

C++ Primer 5th Answers

CSS/HTML

学习CSS布局

通用 CSS 笔记、建议与指导

CSS参考手册

Emmet 文档

前端代码规范 (腾讯alloyteam团队)

Dart

Dart 语言导览

Fortran

Fortran77和90/95编程入门

Java

实时 Java 系列

Apache Shiro 用户指南

使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序

第 1 部分: Web Services 服务端应用程序

第 2 部分: Web 服务客户端应用程序

JavaServer Faces 1.2 入门

第 1 部分: 构建基本应用程序

第 2 部分: JSF 生命周期、转换、检验和阶段监听器

用 Eclipse Europa 进行 Web 开发

第 1 部分: Eclipse Java EE

第 2 部分: PHP 开发工具

第 3 部分: Ruby Development Toolkit 和 RadRails

使用 JavaServer Faces 构建芦洞 Apache Geronimo 应用程序

第 1 部分: 使用 Eclipse 和 Apache MyFaces Core 构建基本的应用程序

第 2 部分: 在 JavaServer Faces 中使用 Tomahawk

第 3 部分: 使用 ajax4jsf 添加 Ajax 功能

第 4 部分: 使用 Apache Trinidad 组件扩展 JSF

第 5 部分: 将 JSF 应用程序与 Spring 集成

Apache Geronimo 和 Spring 框架

第 1 部分: 开发方法学

第 2 部分: 构建第一个应用程序

第 3 部分: 集成 DAO 与 ORM

第 4 部分: 混合使用 Spring AOP 和 Spring Web Flow

第 5 部分: Spring MVC

第 6 部分: Spring MVC:使用 Web 视图技术

终极 mashup —— Web 服务和语义 Web

第 1 部分: 使用与组合 Web 服务

第 2 部分: 管理 Mashup 数据缓存

第 3 部分: 理解 RDF 和 RDFs

第 4 部分: 创建本体

第 5 部分: 切换 Web 服务

Jersey 2.x 用户指南

MyBatis中文文档

JavaScript

Google JavaScript 代码风格指南

Airbnb JavaScript 规范

JavaScript 标准参考教程(alpha)

Javascript编程指南 (源码)

javascript 的 12 个怪癖

JavaScript 秘密花园

JavaScript核心概念及实践 (PDF) (此书已由人民邮电出版社出版发行,但作者依然免费提供PDF版本,希望开发者们去购买,支持作者)

《JavaScript 模式》翻译,此书中文版有售,但是纸质书翻译的还没有这个版本翻译的好

命名函数表达式探秘 (注:原文由为之漫笔翻译,原始地址无法打开,所以此处地址为我博客上的备份)

学用 JavaScript 设计模式 (开源中国)

深入理解JavaScript系列

ECMAScript 6 入门 (作者:阮一峰)

jQuery

jQuery 解构

简单易懂的JQuery魔法

How to write jQuery plugin

Node.js

Node入门

七天学会NodeJS

Nodejs Wiki Book (繁体中文)

express.js 中文文档

koa 中文文档

使用 Express + MongoDB 搭建多人博客

Express框架

nodejs文档

Node.js 包教不包会

Learn You The Node.js For Much Win! (中文版)

Node debug 三法三例

underscore.js

Underscore.js中文文档

backbone.js

backbone.js入门教程 (PDF)

Backbone.js入门教程第二版

Developing Backbone.js Applications(中文版)

AngularJS

AngularJS最佳实践和风格指南

AngularJS中译本

AngularJS入门教程

构建自己的AngularJS

在Windows环境下用Yeoman构建AngularJS项目

zepto 简明中文手册

Sea.js

Hello Sea.js

CoffeeScript

CoffeeScript Cookbook

The Little Book on CoffeeScript中文版

ExtJS

Ext4.1.0 中文文档

Chrome扩展及应用开发

JavaScript入门教程

PHP

PHP调试技术手册(PDF)

XDebug 2中文手册(译) (CHM)

PHP之道

PHP 最佳实践

PHP安全最佳实践

深入理解PHP内核

PHP扩展开发及内核应用

CodeIgniter 用户指南

Laravel4 中文文档

Laravel 入门

Symfony2中文文档 (未译完)

Phalcon中文文档(翻译进行中)

YiiBook几本Yii框架的在线教程

简单易懂的PHP魔法

swoole文档及入门教程

iOS

iOS开发60分钟入门

iOS7人机界面指南

Google Objective-C Style Guide 中文版

iPhone 6 屏幕揭秘

Apple Watch开发初探

马上着手开发 iOS 应用程序

网易斯坦福大学公开课:iOS 7应用开发字幕文件

Android

Android Design(中文版)

Google Android官方培训课程中文版

Android学习之路

Python

小白的Python教程

简明Python教程

零基础学Python

Python 2.7 官方教程中文版

Python 3.3 官方教程中文版

深入 Python 3

PEP8 Python代码风格规范

Google Python 风格指南 中文版

Python入门教程 (PDF)

Python的神奇方法指南

笨办法学 Python (PDF版下载)

Django 文档中文版

Django 最佳实践

The Django Book 中文版

web.py 0.3 新手指南

Web.py Cookbook 简体中文版

Dive Into Python 中文版

Bottle 文档中文版 (需翻墙)

Flask 文档中文版

Jinja2 文档中文版

Werkzeug 文档中文版

Flask之旅

Introduction to Tornado 中文翻译

Python自然语言处理中文版 (感谢陈涛同学的翻译,也谢谢  @shwley 联系了作者)

Python 绘图库 matplotlib 官方指南中文翻译

Scrapy 0.25 文档

ThinkPython

Ruby

Ruby 风格指南

Rails 风格指南

笨方法学 Ruby

Ruby on Rails 指南

Ruby on Rails 实战圣经

Ruby on Rails Tutorial 原书第 2 版 (本书网页版免费提供,电子版以 PDF、EPub 和 Mobi 格式提供购买,仅售 9.9 美元)

编写Ruby的C拓展

Ruby 源码解读

Shell

Shell脚本编程30分钟入门

Go

Go编程基础

Go入门指南

学习Go语言 (PDF)

Go Web 编程 (此书已经出版,希望开发者们去购买,支持作者的创作)

Go实战开发 (当我收录此项目时,作者已经写完第三章,如果读完前面章节觉得有帮助,可以给作者捐赠,以鼓励作者的继续创作)

Network programming with Go 中文翻译版本

Groovy

实战 Groovy 系列

LaTeX

一份其实很短的 LaTeX 入门文档

一份不太简短的 LATEX 2ε 介绍 (PDF版)

LISP

ANSI Common Lisp 中文翻译版

Lua

Lua编程入门

Haskell

Real World Haskell 中文版

R

R语言忍者秘笈

Scala

Scala课堂 (Twitter的Scala中文教程)

Effective Scala(Twitter的Scala最佳实践的中文翻译)

Scala指南

Swift

The Swift Programming Language 中文版

Perl

Modern Perl 中文版

Perl 程序员应该知道的事

Prolog

笨办法学Prolog

Vim中文文档

Vimscript

笨方法学Vimscript 中译本

Vim中文文档

读书笔记及其它 读书笔记

编译原理(紫龙书)中文第2版习题答案

把《编程珠玑》读薄

Effective C++读书笔记

Golang 学习笔记、Python 学习笔记、C 学习笔记 (PDF)

Jsoup 学习笔记

学习笔记: Vim、Python、memcached

图灵开放书翻译计划–C++、Python、Java等

蒂姆·奥莱利随笔 (由译言网翻译,电子版免费)

Octave 入门 (PDF版)

SICP 解题集

精彩博客集合

正则表达式简明参考


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12561829.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存