|
2 | 2 |
|
3 | 3 | > 浏览器插件是一种可以在浏览器中安装的软件,它可以增强浏览器的功能,比如可以通过插件实现广告屏蔽、页面翻译、下载管理等功能。
|
4 | 4 |
|
5 |
| -## 开发基础知识概念介绍 |
| 5 | +## manifest.json |
6 | 6 |
|
7 |
| -### 1. 插件的分类 |
| 7 | +manifest.json 是插件的配置文件,它可以配置插件的名称、版本、图标、权限等。 |
8 | 8 |
|
9 |
| -浏览器插件主要分为以下几类: |
| 9 | +```json5 |
| 10 | +{ |
| 11 | + name: "My Extension", |
| 12 | + version: "1.0", |
| 13 | + manifest_version: 3, |
| 14 | + description: "This extension is a starting point to create a real extension.", |
| 15 | + permissions: ["storage", "activeTab"], |
| 16 | + action: { |
| 17 | + default_popup: "popup.html", |
| 18 | + default_icon: { |
| 19 | + "16": "images/get_started16.png", |
| 20 | + "48": "images/get_started48.png", |
| 21 | + "128": "images/get_started128.png", |
| 22 | + }, |
| 23 | + }, |
| 24 | + background: { |
| 25 | + service_worker: "background.js", |
| 26 | + }, |
| 27 | + options_page: "options.html", |
| 28 | + content_scripts: [ |
| 29 | + { |
| 30 | + matches: ["<all_urls>"], |
| 31 | + js: ["content.js"], |
| 32 | + css: [], |
| 33 | + }, |
| 34 | + ], |
| 35 | + web_accessible_resources: ["images/*.png"], |
| 36 | + icons: { |
| 37 | + "16": "images/get_started16.png", |
| 38 | + "48": "images/get_started48.png", |
| 39 | + "128": "images/get_started128.png", |
| 40 | + }, |
| 41 | + browser_action: { |
| 42 | + default_popup: "popup.html", |
| 43 | + default_icon: { |
| 44 | + "16": "images/get_started16.png", |
| 45 | + "48": "images/get_started48.png", |
| 46 | + "128": "images/get_started128.png", |
| 47 | + }, |
| 48 | + }, |
| 49 | + host_permissions: ["http://www.example.com/"], |
| 50 | + optional_permissions: ["tabs"], |
| 51 | + chrome_url_overrides: { |
| 52 | + newtab: "newtab.html", |
| 53 | + }, |
| 54 | +} |
| 55 | +``` |
10 | 56 |
|
11 |
| -- **扩展插件**:扩展插件是一种可以修改浏览器的行为的插件,比如可以通过扩展插件实现广告屏蔽、页面翻译、下载管理等功能。 |
12 |
| -- **主题插件**:主题插件是一种可以修改浏览器的外观的插件,比如可以通过主题插件修改浏览器的背景、图标等。 |
13 |
| -- **应用插件**:应用插件是一种可以在浏览器中运行的应用程序,比如可以通过应用插件实现在线聊天、音乐播放等功能。 |
14 |
| -- **搜索插件**:搜索插件是一种可以在浏览器中添加搜索引擎的插件,比如可以通过搜索插件添加百度、谷歌等搜索引擎。 |
15 |
| -- **工具栏插件**:工具栏插件是一种可以在浏览器中添加工具栏的插件,比如可以通过工具栏插件添加书签、历史记录等功能。 |
16 |
| -- **辅助插件**:辅助插件是一种可以在浏览器中添加辅助功能的插件,比如可以通过辅助插件实现页面截图、网页翻译等功能。 |
| 57 | +## background.js |
17 | 58 |
|
18 |
| -### background.js |
| 59 | +background.js 是插件的后台脚本,它可以监听浏览器事件、处理插件请求、与页面通信等。基于 background 的 service_workerAPI 可以打开一个独立后台运行脚本。此脚本会随着插件安装,初始化执行一次,然后一直在后台运行。可以用来存储浏览器的全局状态数据。background 脚本是长时间运行在后台,随着浏览器打开就运行,直到浏览器关闭而结束运行。通常把需要一直运行的、启动就运行的、全局公用的数据放到 background 脚本。 |
19 | 60 |
|
20 |
| -background.js 是插件的后台脚本,它可以监听浏览器事件、处理插件请求、与页面通信等。 |
| 61 | +```js |
21 | 62 |
|
22 |
| -### content.js |
| 63 | +``` |
23 | 64 |
|
24 |
| -content.js 是插件的内容脚本,它可以在页面中注入脚本、修改页面内容、与页面通信等。 |
| 65 | +## content.js |
25 | 66 |
|
26 |
| -### manifest.json |
| 67 | +content.js 是插件的内容脚本,它可以在页面中注入脚本、修改页面内容、与页面通信等。content-scripts(内容脚本)是在网页上下文中运行的文件。通过使用标准的文档对象模型(DOM),它能够读取浏览器访问的网页的详细信息,可以对打开的页面进行更改,还可以将 DOM 信息传递给其父级插件。内容脚本相对于 background 还是有一些访问 API 上的限制,它可以直接访问以下 chrome 的 API |
27 | 68 |
|
28 |
| -manifest.json 是插件的配置文件,它可以配置插件的名称、版本、图标、权限等。 |
| 69 | +- i18n |
| 70 | +- storage |
| 71 | +- runtime: |
| 72 | + - connect |
| 73 | + - getManifest |
| 74 | + - getURL |
| 75 | + - id |
| 76 | + - onConnect |
| 77 | + - onMessage |
| 78 | + - sendMessage |
| 79 | + |
| 80 | +content.js 运行于一个独立、隔离的环境,它不会和主页面的脚本或者其他插件的内容脚本发生冲突 有 2 种方式添加 content 脚本,一种是通过 manifest.json 配置,另一种是通过 chrome.tabs.executeScript()方法注入。通过 manifest.json 配置的方式,需要在 manifest.json 中配置 content_scripts 属性,如下所示: |
| 81 | + |
| 82 | +```json5 |
| 83 | +{ |
| 84 | + content_scripts: [ |
| 85 | + { |
| 86 | + matches: ["<all_urls>"], |
| 87 | + js: ["content.js"], |
| 88 | + css: [], |
| 89 | + }, |
| 90 | + ], |
| 91 | +} |
| 92 | +``` |
| 93 | + |
| 94 | +content_scripts 属性除了配置 js,还可以设置 css 样式,来实现修改页面的样式。matches 表示需要匹配的页面;除了这 3 个属性,还有 |
| 95 | + |
| 96 | +run_at: 脚本运行时刻,有以下 3 个选项: |
| 97 | + |
| 98 | +- document_idle,默认;浏览器会选择一个合适的时间注入,并是在 dom 完成加载 |
| 99 | +- document_start;css 加载完成,dom 和脚本加载之前注入。 |
| 100 | +- document_end:dom 加载完成之后 |
| 101 | + |
| 102 | +exclude_matches:排除匹配到的 url 地址。作用和 matches 相反。 |
| 103 | + |
| 104 | +chrome.tabs.executeScript()方法注入,可以通过 chrome.tabs.executeScript()方法注入脚本,如下所示: |
| 105 | + |
| 106 | +```js |
| 107 | +chrome.tabs.executeScript(tabId, { |
| 108 | + file: "content.js", |
| 109 | +}); |
| 110 | +``` |
| 111 | + |
| 112 | +## popup.html |
| 113 | + |
| 114 | +popup.html 是插件的弹窗页面,它可以显示插件的功能、与用户交互等。 |
| 115 | + |
| 116 | +## options.html |
| 117 | + |
| 118 | +options.html 是插件的设置页面,它可以配置插件的参数、保存用户设置等。 |
| 119 | + |
| 120 | +## newtab.html |
29 | 121 |
|
30 | 122 | ## 浏览器插件开发-通信
|
| 123 | + |
| 124 | +[浏览器插件开发-通信](./浏览器插件开发-通信篇.md) |
| 125 | + |
| 126 | +## 参考链接 |
| 127 | + |
| 128 | +- [浏览器插件开发](https://mp.weixin.qq.com/s/QUgT5bGRutstyo0l6nHFfg) |
0 commit comments