电子书 编程

构建浏览器扩展:为 Chrome、Safari、Firefo

¥1.00 已售 0
✓ 自动发货 ✓ 永久有效 ✓ 售后保障

资源介绍

x 和 Edge 创建现代扩展(第二版)(英文版电子书) 第 1 章:什么是浏览器扩展​ 定义:浏览器扩展是能在网页上运行但独立于网站和服务器的软件,可查看 / 修改浏览器内容、管理 HTTP 请求、存储账户凭证等。​ 历史演变:​ 起源可追溯到 20 世纪 70 年代 UNIVAC 主机的插件​ 早期网页浏览器通过 HTML、JavaScript 和 DOM 允许自定义​ 经历了从原生浏览器插件(如 Java applets、Flash)到现代扩展的转变​ 扩展类型:广告和跟踪拦截器、密码管理器、智能写作工具、无障碍工具、内容聚合器、标签管理工具、屏幕录制工具、软件平台集成、AI 助手、数字货币钱包、开发者工具等。​ 第 2 章:浏览器扩展的基本元素​ 浏览器模型:浏览器标签采用沙箱机制,每个标签有独立的 JavaScript 运行时、内存等,相同源的标签可共享资源。​ 同源策略(SOP):限制不同源 web 应用之间的数据访问。​ 浏览器扩展模型:​ 拥有独立的 JavaScript 页面和运行时​ 可访问原生 API 和用户界面​ 有权限控制的标签和域名访问能力​ 可观察和拦截网络请求​ 扩展核心元素:​ 清单文件(Manifest):扩展的规则手册,包含名称、版本、文件入口、权限等信息。​ 背景脚本(Background Scripts):处理浏览器事件,在 Manifest V3 中以服务工作线程形式存在。​ 扩展 UI 页面:包括弹出页面(Popup Page)、选项页面(Options Page)、侧边栏(Side Panel)等。​ 内容脚本(Content Scripts):注入到网页中的脚本,可操作 DOM。​ 开发者工具面板:集成到浏览器开发者工具中的自定义界面。​ 第 3 章:浏览器扩展快速入门​ 清单文件创建:定义扩展的基本信息和配置。​ 最小可行扩展:仅包含清单文件的简单扩展。​ 扩展安装与重载:通过浏览器的开发者模式加载和解压扩展,修改后需重载使其生效。​ 扩展骨架构建:添加背景脚本、弹出页面、选项页面、侧边栏和内容脚本,实现各部分的协同工作。​ 第 4 章:浏览器扩展架构​ 架构概述:由背景服务工作线程、扩展 UI、开发者工具页面、内容脚本等组成。​ 关键组件:​ 背景服务工作线程:扩展的神经中枢,处理事件、消息传递等。​ 扩展 UI:包括弹出页面、选项页面等,作为与用户交互的界面。​ 内容脚本:注入到网页,可操作 DOM 并与扩展其他部分通信。​ 文件服务器:浏览器将扩展文件通过内置文件服务器提供访问,使用特定协议(如 chrome-extension://)。​ 沙盒页面:可使用受限功能(如 inline scripts、eval ()),但无法访问 WebExtensions API。​ 第 5 章:扩展清单​ 清单文件作用:作为扩展的蓝图,包含名称、版本、入口文件、权限等配置。​ 核心属性:​ 基础信息:name、version、manifest_version 等。​ 功能配置:action(工具栏图标行为)、background(背景脚本)、content_scripts(内容脚本)等。​ 权限管理:permissions、host_permissions 等。​ Manifest V2 与 V3 差异:V3 采用服务工作线程代替持久化背景脚本,引入声明式网络请求 API 等。​ 第 6 章:背景脚本​ 作用:处理浏览器事件,如扩展安装 / 卸载、标签导航等。​ Web 页面服务工作线程与扩展服务工作线程的异同:​ 相似:单实例、初始化和生命周期、顶级事件处理、异步消息传递。​ 不同:注册方式、用途(扩展服务工作线程主要处理事件而非缓存)。​ Manifest V3 中的变化:​ 背景脚本变为服务工作线程,非持久化。​ 无法访问 DOM 和部分全局 API。​ 常见模式:事件处理、秘密管理与认证、消息 hub、存储管理、脚本注入、网络流量监控等。​ 第 7 章:扩展用户界面​ 扩展 UI 类型:​ 弹出页面:点击工具栏图标弹出的临时界面,适合快速访问的内容。​ 选项页面:用于配置扩展设置,可在标签或模态窗口中打开。​ 侧边栏:持久化的垂直面板,可在浏览时保持打开。​ 开发者工具页面:集成到浏览器开发者工具中的界面。​ 管理页面:由扩展提供的 HTML 页面,可访问 WebExtensions API。​ UI 状态检测:通过背景脚本广播 "检查" 消息来跟踪所有活动的扩展 UI。​ 第 8 章:内容脚本​ 作用:注入到网页中,可修改网页内容和行为。​ WebExtensions API 访问限制:仅能访问部分 API,如 chrome.runtime、chrome.storage 等。​ 注入行为:​ CSS 注入需注意特异性以覆盖页面样式。​ JavaScript 注入有独立的执行上下文,默认与页面脚本隔离。​ 特殊属性:​ 注入时机:document_start、document_end、document_idle。​ 脚本世界:ISOLATED(默认,与页面脚本隔离)和 MAIN(与页面脚本共享执行上下文)。​ 匹配规则:通过 URL 模式等控制注入范围。​ 第 9 章:扩展和浏览器 API​ API 命名空间:通过 chrome.* 或 browser.* 访问,Chrome 逐渐支持 browser.* 以提高跨浏览器兼容性。​ 异步处理:支持回调和 Promise 两种方式,错误处理方式不同。​ 核心 API:​ 权限 API:检查和请求权限。​ 消息传递 API:实现扩展各部分之间、扩展与外部实体之间的通信。​ 存储 API:提供 local、sync、session 和 managed 四种存储方式。​ 身份验证 API:管理 OAuth 流程等。​ 网络请求 API:包括 declarativeNetRequest、webRequest、webNavigation 等,用于拦截和管理网络请求。​ 国际化 API:处理多语言支持。​ AI 相关 API:如 Chrome 中的 Gemini Nano 模型相关接口。​ 浏览器和系统控制 API:如电源管理、地址栏(Omnibox)、通知、上下文菜单等。​ 第 10 章:权限​ 基本概念:类似移动应用权限,需明确请求才能访问强大的 API。​ 权限类型:​ 必要权限:在 manifest 中声明,安装时需用户批准。​ 可选权限:可在运行时请求,用户可选择是否授予。​ 主机权限:控制扩展可访问的域名。​ 权限生命周期:一旦授予,在扩展生命周期内有效,用户可通过浏览器界面撤销。​ 权限警告:某些权限会在安装或请求时向用户显示警告信息。​ 第 11 章:网络和身份验证​ 网站与扩展的网络差异:扩展有不同的源、API 访问限制、页面类型限制等。​ 网络架构:扩展 UI、内容脚本、背景脚本在发送网络请求方面各有特点和限制。​ 身份验证方式:​ 无身份验证:利用浏览器原生功能。​ 欺骗性身份验证:如内容脚本利用页面的 cookie 进行请求。​ JWT 认证:适合应用级认证。​ OAuth 和 OpenID:通过 chrome.identity API 实现。​ 网络 API:webNavigation API(观察导航事件)、webRequest API(拦截和修改网络请求)、declarativeNetRequest API(声明式网络请求管理)。​ 第 12 章:扩展教程​ 记事本扩展:使用弹出页面、背景脚本、存储 API 和上下文菜单 API,实现文本笔记的创建、保存和管理。​ 标签管理器:通过侧边栏展示所有打开的标签,支持搜索、激活和关闭标签。​ 截图捕获工具:利用键盘快捷键触发,捕获当前标签的可见部分并提供下载功能。​ 密码管理器:检测登录表单提交、存储凭据,并在用户重访网站时自动填充。​ 广告拦截器:使用 declarativeNetRequest API 拦截已知广告网络域名的请求。​ LLM 聊天机器人:在侧边栏嵌入基于 Gemini 的聊天机器人,支持对话历史存储。​ 本地 AI 摘要器:利用 Chrome 的本地 Summarizer API 生成网页内容摘要。​ 用户脚本注入器:允许用户输入 JavaScript 并注入到网页中。​ 开发者工具扩展:创建自定义 DOM 树浏览器,在开发者工具中高亮对应的 DOM 节点。​ 付费扩展:集成 ExtensionPay 实现扩展的付费功能。​ 第 13 章:扩展的开发、发布和管理​ 本地开发:​ 扩展检查:通过浏览器扩展管理页面查看扩展详情、检查视图等。​ 文件变更:修改源文件后,部分内容需重载扩展或页面才能生效。​ 错误监控:通过开发者工具和扩展错误视图跟踪错误。​ 扩展重载:多种重载方式,适用于不同场景。​ 自动化测试:单元测试(如使用 Vitest)和集成测试(如使用 Puppeteer)。​ 发布扩展:​ 商店列表:准备扩展描述、分类、截图等信息。​ 隐私实践:说明扩展的行为和权限使用理由。​ 审核流程:首次提交需人工审核。​ beta 测试:通过邮件、Google Group 或直接链接向特定用户分发。​ 扩展更新:提交包含更新版本号的 zip 文件,新增权限需额外说明,更新存在延迟。​ 关键技术点​ Manifest V3:当前主流的清单版本,采用服务工作线程、声明式网络请求等,安全性和性能更优。​ 跨浏览器兼容性:不同浏览器对扩展 API 的支持存在差异,需进行适配。​ 权限管理:合理申请权限,平衡功能需求和用户隐私安全。​ 消息传递:扩展各部分(背景脚本、内容脚本、UI 页面等)之间通过 API 进行通信。​ 安全考量:避免敏感信息泄露,正确处理用户数据和认证凭证。​ 适用人群​ 希望开发浏览器扩展的 web 开发者​ 对浏览器扩展原理和架构感兴趣的技术人员​ 需要针对多浏览器开发扩展的工程师Building Browser Extensions