翻译自Chrome开发者网站扩展程序开发文档。英文文档链接: Chrome Developers - Extensions
第一次翻译英文开发文档,同时自己也是在边学习边翻译,因此对于译文中存在的理解偏差与翻译不到位还请谅解。文中的链接依旧是英文原文档的链接,需要到外网访问。目前仅翻译至原文 Getting Started 章节,该章节包含了一个简要的入门示例。后续章节或许会继续翻译。

欢迎

学习如何为Chrome开发扩展程序

更新于2020年11月09日(UTC+8)

如下页面包含给想要为Chrome浏览器创造扩展程序的开发者提供的引导和参考信息。如果您不确定从何开始,可以查看如下的新手页面:

  • 什么是扩展程序?帮助您理解一个扩展程序到底是什么。
  • 起步教程 如果您已经准备开始编码。

除此之外,您或许能在以下页面发现有用的入手点:

  • 了解不同组成部分的作用域 扩展程序开发概述
  • 从 示例页面 挑选一些示例扩展程序,安装,然后开始“破解”它们
  • 在 扩展程序开发问答页 寻求答案

除了此处的文档,许多开发者能在下面找到有用的社区内容:

  • Chromium扩展程序 Google群组
  • Stack Overflow google-chrome extension 标签内容

感谢成为扩展程序开发社区的一员。我们很高兴在此见到您!

Chrome扩展程序的新特性

阅读本页内容了解Chrome扩展程序平台的变动,包括文档、相关政策或其他变更。

2021.01.19:Manifest V3发布

发布于2021年02月25日(UTC+8)

随着Chrome 88的发布,扩展程序平台现在支持由Manifest v3构建的扩展程序,并且您还可以将它们上传到Chrome网上应用商店。Manifest v3是一个新的扩展程序平台,能使Chrome扩展程序在默认情况下更安全、高效及隐私友好。

查看 欢迎使用Manifest V3 以获取关于Manifest V3更加全面的信息,以及如何为其构建或迁移扩展程序。

起步

更新于2020年11月18日(UTC+8)

扩展程序由不同但相互协作的组件所组成。组件可以包括后台脚本(background scripts)、内容脚本(content scripts)、一个选项页面(options page)、UI元素和各种逻辑文件(UI elements)。扩展程序组件通过web开发技术创建:HTML、CSS和JavaScript。一个扩展程序的组件构成取决于它的功能,并不要求包括所有选项。

本教程将构建一个扩展程序,允许用户改变当前聚焦页面的背景颜色。它将用到许多扩展程序平台的组件以作为它们之间关系的一个介绍性演示。

作为起步,创建一个新目录以存放扩展程序的文件。

完整的扩展程序可从此处下载。

创建manifest文件

扩展程序从它们的manifest文件开始。创建一个manifest.json文件并引入如下代码:

{"name": "起步示例","description":"构建一个Chrome扩展!","version":"1.0","manifest_version":3
}

现在,包含了manifest文件的目录能在开发者模式下作为一个扩展程序被添加。

  1. 在Chrome地址栏中键入 chrome://extensions 以导航到扩展程序管理界面。

    • 可选地,可以点击扩展程序菜单按钮并选择菜单底部的管理扩展程序项。
    • 可选地,可以点击Chrome菜单,鼠标悬停在更多工具然后选择扩展程序
  2. 点击开发者模式旁的开关按钮以开启开发者模式。
  3. 点击加载已解压的扩展程序按钮,选择刚刚创建的扩展程序目录。

铛铛!扩展程序已经被成功安装了。因为没有图标在manifest文件中被引用,所以会为扩展程序创建一个默认图标。

添加功能

现在已经安装好扩展程序,但是它目前不会做任何事情,因为我们还没告诉它做什么以及什么时候去做。让我们添加一些代码来存储一个背景颜色值以解决这个问题。

要完成这个任务,我们需要创建一个后台脚本并在扩展程序的manifest文件中引入它。先在扩展程序目录下创建脚本文件background.js,并更新manifest文件。

{"name": "起步示例","description":"构建一个Chrome扩展!","version":"1.0","manifest_version":3,"background": {"service_worker": "background.js"}
}

后台脚本就如其他重要的组件一样,必须在manifest文件中被引入。通过在manifest文件中引入一个后台脚本,能告诉扩展程序引用哪个文件,以及指定该文件的行为。
Chrome现在知道该扩展程序包括了一个 service worker。当你重载此扩展程序,Chrome将会扫描指定的文件以引入新增的指令,例如它需要监听的重要事件。

这个扩展程序将会需要在安装之际就从持久化的变量中获取信息。通过在后台脚本中引入监听事件runtime.onInstalled满足该需求。在onInstalled监听器内部,扩展程序使用 storage API 来设定一个数值。这将允许不同扩展程序组件访问与更新该数值。

let color = '#3aa757';
chrome.runtime.onInstalled.addListener(() => {chrome.storage.sync.set({ color });console.log('默认背景颜色设置为%cgreen', `color: ${color}`);
});

包括 storage 的大多数API都必须在manifest文件中的 “permissions” 字段下引入,以使扩展程序能够使用它们。

{"name": "起步示例","description":"构建一个Chrome扩展!","version":"1.0","manifest_version":3,"background": {"service_worker": "background.js"},"permissions": ["storage"]
}

导航回扩展程序管理界面并点击重载按钮。一个新的选项查看视图出现,并带有一个蓝色链接Service Worker

点击链接以查看后台脚本的控制台日志输出:“默认背景颜色设置为green”。

引入一个用户界面

扩展程序可以拥有许多不同形式的用户界面,本示例将采用一个弹框界面(popup)。在扩展程序目录下创建文件 popup.html 。此扩展程序使用一个按钮来改变背景颜色。

<!DOCTYPE html>
<html><head><link rel="stylesheet" href="button.css"></head><body><button id="changeColor"></button></body>
</html>

同于后台脚本,这个文件必须在manifest文件中声明以使Chrome在扩展程序的弹框中展示它。为了达成这个目的,在manifest文件中添加一个动作(action)字段,并且设置popup.html文件作为动作字段的默认弹框(default_popup)。

{"name": "起步示例","description":"构建一个Chrome扩展!","version":"1.0","manifest_version":3,"background": {"service_worker": "background.js"},"permissions": ["storage"],"action": {"default_popup": "popup.html"}
}

HTML文件 popup.html 引用了一个外部的CSS文件 button.css 。为此在扩展程序目录下添加一个新的文件并以此命名,在文件中键入以下代码:

button {height: 30px;width: 30px;outline: none;margin: 10px;border: none;border-radius: 2px;
}
button.current {box-shadow: 0 0 0 2px white,0 0 0 4px black;
}

工具栏图标的指定也包括在动作字段下的 default_icons 项。从此处下载图片文件夹,解压它,然后将它放在扩展程序目录。更新manifest文件以使扩展程序知道如何使用这些图片。

{"name": "起步示例","description":"构建一个Chrome扩展!","version":"1.0","manifest_version":3,"background": {"service_worker": "background.js"},"permissions": ["storage"],"action": {"default_popup": "popup.html","default_icon": {"16": "/images/get_started16.png","32": "/images/get_started32.png","48": "/images/get_started48.png","128": "/images/get_started128.png"}}
}

扩展程序也会在扩展程序管理界面、权限警告和扩展程序图标中展示这些图片。这些地方的图片指定在manifest文件中的 icons 字段设置。

{"name": "起步示例","description":"构建一个Chrome扩展!","version":"1.0","manifest_version":3,"background": {"service_worker": "background.js"},"permissions": ["storage"],"action": {"default_popup": "popup.html","default_icon": {"16": "/images/get_started16.png","32": "/images/get_started32.png","48": "/images/get_started48.png","128": "/images/get_started128.png"}},"icons": {"16": "/images/get_started16.png","32": "/images/get_started32.png","48": "/images/get_started48.png","128": "/images/get_started128.png"}
}

如果扩展程序在这个阶段重载,它将会包含提供的图标图片而不是采用默认图标,并且点击扩展程序图标将打开一个弹窗,内含一个默认颜色的按钮。

构建弹框UI的最后一步是添加颜色到按钮。在扩展程序目录下创建文件popup.js键入以下代码:

// 以用户偏好的颜色初始化按钮
let changeColor = document.getElementById("changeColor");
chrome.storage.sync.get("color", ({ color }) => {changeColor.style.backgroundColor = color;
})

以上代码从 popup.html 中获取按钮并从存储中获取颜色数值。接着,它将获取的色值应用到按钮的背景颜色上。在popup.html中添加一个 script 标签以引入脚本文件popup.js

<!DOCTYPE html>
<html><head><link rel="stylesheet" href="button.css"></head><body><button id="changeColor"></button><script src="popup.js"></script></body>
</html>

重载扩展程序以查看设置好的绿色按钮。

层逻辑

扩展程序现在拥有一个自定义图标和一个弹框了,并且它根据保存在扩展程序存储中的色值为弹框中的按钮着色。接下来,它需要与用户进一步交互的逻辑。更新popup.js文件,在其尾部追加以下代码:

// 当点击按钮,将 setPageBackgroundColor 函数注入到当前页面
changeColor.addEventListener("click", async () => {let [tab] = await chrome.tabs.query({ active: true, currentWindow: true});chrome.scripting.executeScript({target: { tabId: tab.id },function: setPageBackgroundColor,});
});
// 该函数的主体会作为内容脚本在当前页面内被执行
function setPageBackgroundColor() {chrome.storage.sync.get("color", ({ color }) => {document.body.style.backgroundColor = color;})
}

更新后的代码在按钮上添加了一个 click 事件监听器,它会触发一个以编程方式注入的内容脚本。这会将页面的背景颜色变为按钮的颜色。使用以编程方式注入允许用户调用的内容脚本,而不是自动插入不想要的代码到网页。
现在manifest文件需要 activeTab 权限以允许扩展程序暂时性地访问当前页面,以及 scripting 权限以使用 Scripting API 的 executeScript 方法。

{"name": "起步示例",..."permissions": ["storage", "activeTab", "scripting"],...
}

至此,扩展程序实现了全部的功能!重载该扩展程序,刷新页面,打开弹框并点击按钮来使页面背景变绿!但是,有些用户或许想要将背景颜色变为另一个不同的颜色。

为用户提供选项

现在扩展程序只允许用户将背景颜色变为绿色。引入一个选项页面以提供用户对该扩展程序更多的控制权,进一步客制化他们的浏览体验。

作为开始,在目录下创建文件 options.html 并键入以下代码:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><link rel="stylesheet" href="button.css"></head><body><div id="buttonDiv"></div><div><p>选择一个不同的背景颜色!</p></div></body><script src="options.js"></script>
</html>

然后在manifest文件中引入该选项页面:

{"name": "起步示例",..."options_page": "options.html"
}

重载扩展程序,然后点击详细信息

向下滑动详细信息页面,然后选择扩展程序选项以浏览选项页面。

最后一步是添加上选项逻辑。在扩展程序目录下新建文件 options.js 并键入以下代码:

let page = document.getElementById("buttonDiv");
let selectedClassName = "current";
const presetButtonColors = ["#3aa757", "#e8453c", "#f9bb2d", "#4688f1"];
// 对按钮点击事件做出响应,包括标记选中的按钮以及保存选中项
function handleButtonClick(event) {// 移除先前选中颜色的样式let current = event.target.parentElement.querySelector(`.${selectedClassName}`);if (current && current != event.target ) {current.classList.remove(selectedClassName);}// 标记按钮为选中状态let color = event.target.dataset.color;event.target.classList.add(selectedClassName);chrome.storage.sync.set({ color });
}
// 在页面上为每个提供的颜色添加一个按钮
function constructOptions(buttonColors) {chrome.storage.sync.get("color", (data) => {let currentColor = data.color;// 对于我们提供的每一种颜色...for (let buttonColor of buttonColors) {// ...创建一个对应颜色的按钮...let button = document.createElement("button");button.dataset.color = buttonColor;button.style.backgroundColor = buttonColor;// ...标记当前选中的颜色...if (buttonColor === currentColor) {button.classList.add(selectedClassName);}// ...注册一个监听按钮点击事件的监听器button.addEventListener("click", handleButtonClick);page.appendChild(button);}});
}
// 初始化页面中的颜色选项按钮
constructOptions(presetButtonColors);

提供了四种颜色选项并在选项页生成了对应按钮并监听点击事件。当用户点击一个按钮,它将更新扩展程序存储中的颜色数值。因为扩展程序中所有的编码文件都是从该存储中获取此颜色信息,因此不需要更新其他数值。

进一步学习

祝贺!至此目录下已包含一个虽然简单但功能完全的Chrome扩展程序。

下一步该做什么?

  • Chrome扩展程序概述包含了许多信息,有许多关于扩展程序总体架构的详细信息,以及一些开发者想要熟悉的特定概念的说明。
  • 学习有关调试扩展程序的可用选项 调试教程
  • Chrome扩展程序访问了许多强大的API包括并不限于在开发网络中的可用API。chrome.* APIs 文档详细阐述了每个API。
  • 开发者引导中拥有许多额外地址链接到与高级扩展程序开发相关的文档。

Chrome扩展程序开发文档(中文译文)相关推荐

  1. 小程序开发文档中没有告诉你的一些事情

    来源:有用!关于微信小程序,那些开发文档没有告诉你的 作者:王婷婷 本文由广研微信小程序的开发团队所做,作者为UI开发工程师王婷婷.本文从UI开发的角度,结合OM小程序的案例,剖析小程序的组件用法与传 ...

  2. 微信小程序开发文档及文件上传示例(JAVA)

    微信小程序开发文档及文档上传示例 一.什么是微信小程序 小程序是一种无需下载安装,即可使用的手机应用.只需要扫描二维码,或是搜一搜,就能立即使用. 与APP不同的是,小程序无需下载安装.无需卸载.用完 ...

  3. 微信小程序开发文档和开发工具放出破解版-亲测可用

    废话不多说,直接上衔接 1,微信小程序开发文档 现阶段最全的开发文档了 http://wxopen.notedown.cn/api/notice.html 2,开发工具 https://github. ...

  4. 微信小程序 开发文档

    官方开发文档: 小程序公众平台 小程序开发者指南 小程序开发者文档 学习资源: 微信:官方入门教程 微信:WeUI 是一套同微信原生视觉体验一致的基础样式库 微信:微信小程序示例 视频: 学堂在线:学 ...

  5. 微信小程序怎么开发(小程序开发文档)

    微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 2017年1月9日~2018年1月9日,小程序正式上线一周年.上线以来,小程序不断地释放新能力, ...

  6. 微信小程序开发文档-小程序配置 /全局配置

    # 全局配置 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置.文件内容为一个 JSON 对象,有以下属性: # 配置项 属性 类型 必填 描述 最低版本 entryPagePat ...

  7. ujquery.fancybox api开发文档中文翻译版

    2016年11月17日11:57:14 基础使用 http://fancybox.net/howto 1. 首先,请确保您使用的是有效的DOCTYPE这是FancyBox看起来和功能正确需要. 2. ...

  8. 微信小程序开发文档——地图

    地图 map map 属性名 类型 默认值 说明 最低版本 longitude Number   中心经度   latitude Number   中心纬度   scale Number 16 缩放级 ...

  9. 微信小程序开发文档——开放能力

    开放能力 open-data (用于展示微信开放的数据.) web-view(web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面.个人类型与海外类型的小程序暂不支持使用.) ...

  10. 学习微信小程序开发文档总结

    1.认识微信小程序 1.完成小程序注册 微信公众平台 (qq.com)根据步骤进行小程序注册,最终获得一个AppID,下载开发者工具,安装后建立第一个小程序项目,填入AppID,才可通过微信扫码进行真 ...

最新文章

  1. 素材诊断分析助手_短视频运营必备的8款数据分析工具
  2. IOS Singleton单例模式用法
  3. openstack 云主机关机,自动running
  4. postman断言测试脚本一
  5. 怎么用linux的HDD存储,Linux学习的正确姿势12:Linux存储概览
  6. JDK core dump分析
  7. Linux ifconfig 配置网络接口
  8. 【漫画】25岁程序员 VS 35岁程序员,塑造自己的不可替代性,才能让自己更有价值 ​...
  9. matplotlib 子图超过4个_Python数据分析:用Matplotlib可视化创建套图
  10. 诺基亚n9支不支持java,支持诺基亚N9 MeeGo UC浏览器正式发布
  11. DnsJumper下载
  12. VMLogin反指纹超级浏览器-模拟真人输入-使用方法
  13. android联想云服务,联想云服务手机客户端
  14. 电磁兼容测试技术简介
  15. 简易2D横版RPG游戏制作
  16. Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for key ‘PRIMARY‘解决方案
  17. 2018C语言自考答案,2018年中考语文试题解析
  18. js正则表达式进行格式校验
  19. 将263邮箱导入到OUTLOOK
  20. java 轮训_vue中轮训器的使用

热门文章

  1. 王道 计算机网络试题讲解_王道考研系列--计算机网络
  2. 2022最新微信小程序商城搭建教程(附源码)
  3. 安卓使用Root权限实现后台模拟全局按键、触屏事件方法(类似按键精灵)
  4. 一套功能强大的点云数据处理软件!
  5. python读写pdf_Python读写PDF
  6. Java 加密、解密PDF文档
  7. UI界面视觉设计之字体要素--安卓-ios-网页常用字体
  8. 南京林业大学883数据结构本校资料
  9. 怎么使用PDF编辑器在PDF中插入图片?PDF插入图片的教程
  10. 电网101、104规约解析(Java)