Chrome 浏览器插件从 Manifest V2 升级到 V3 版本所需要修改的点
最早从2024年6月的Chrome 127版本开始,Chrome 不再支持不稳定版本(开发者版、Canary版和Beta版)中的Manifest V2扩展程序。受影响的用户将看到这些扩展程序自动停用,并无法在Chrome应用商店安装。此外,这些扩展程序将不再拥有“精选”徽章(如果已存在)。对于使用ExtensionManifestV2Availability政策确保组织中Manifest V2扩展程序能持续运行的企业,有额外一年的时间(即2025年6月之前)进行迁移。在此之前,启用此政策的浏览器将不受弃用安排的影响。
建议开发者在2024年6月之前完成向Manifest V3的迁移。
以下为Manifest V3迁移核对列表,包括文件修改、权限调整、API调用和功能替换等关键点:
Manifest.json文件修改
1. 更新manifest_version版本号:将manifest_version字段值从2更改为3。
2. 更新permissions和host_permissions字段:在Manifest V3中,主机权限在单独的字段中表示,无需在permissions或optional_permissions中指定这些权限。
迁移至Service Worker
1. 使用service worker替换background或event pages,确保后台代码远离主线程,使扩展程序在需要时运行,节省资源。
其他字段修改
3. 更新web_accessible_resources字段:限制哪些网站和扩展程序可以访问扩展程序中的资源,限制数据公开范围。在Manifest V2中,指定资源默认可供所有网站访问;在Manifest V3示例中,资源仅供匹配网站使用,某些图片仅供所有网站访问。
功能替换与调整
2. 更新manifest.json中的background字段:在Manifest V3中,background页面被Service Worker取代,使用单个字符串的"service_worker"字段,且当使用ES模块时需要"type"字段,值始终为"module"。
DOM与window调用移至屏幕外文档
某些扩展程序需要访问DOM和window对象,无需打开新的窗口或标签页。使用Offscreen API支持此类用例,因为它可以打开和关闭与扩展程序打包在一起的未显示文档,而不会干扰用户体验。除了消息传递之外,屏幕外文档不会与其他扩展程序上下文共享API,而是起到完整网页的作用,供扩展程序进行互动。
存储状态
Service Worker是临时的,可能导致数据在浏览器会话期间反复启动、运行和终止。使用存储API保存状态,对于Manifest V3来说,需要将全局变量替换为对Storage API的调用。
替换计时器/定时器
将setTimeout()或setInterval()替换为alarms,因为setTimeout()或setInterval()在Service Worker中可能失败,因为每当Service Worker终止时,计时器就会取消。
API调用修改
1. 将tab.executeScript()替换为scripting.executeScript():executeScript()从tabs API移至scripting API,需要更改manifest.json文件中的权限。
2. 将tab.insertCSS()和tab.removeCSS()替换为scripting.insertCSS()和scripting.removeCSS():insertCSS()和removeCSS()已从tabs API移至scripting API,需要更改manifest.json文件中的权限。
3. 将Browser Actions和Page Actions替换为Actions:在Manifest V2中,Browser Actions和Page Actions是两个概念,随着时间推移,差异减小,现在整合到Action API中,需要更改manifest.json和扩展代码。
回调与Promise转换
许多API方法在Manifest V3中返回Promise。需要从回调转换为Promise,移除回调并处理返回的Promise。
替换需要背景上下文的函数
其他扩展程序上下文只能通过消息传递与扩展程序Service Worker交互。因此,需要替换需要后台上下文的调用,如chrome.runtime.getBackgroundPage()、chrome.extension.getBackgroundPage()、chrome.extension.getExtensionTabs()等。
替换不受支持的API
需要在Manifest V3中更改的方法和属性包括:
1. 更新permissions:对manifest.json中的"permissions"字段进行更改。
2. 创建声明性网络请求规则:通过向manifest.json添加"declarative_net_request"对象,并在规则文件中指定规则来实现。
替换Web请求监听器
Manifest V3更改了扩展程序处理网络请求修改的方式,扩展程序通过描述一组给定条件来执行操作,而不是拦截网络请求。需要根据用例重新编写代码,而不是简单替换函数调用。
总结,从Manifest V2升级到V3涉及文件结构、权限调整、API使用、功能替换等多个方面。开发者需密切关注官方文档,确保代码兼容性和功能完整性的转换。
如何使用Ubuntu截图?
对于高级用户,还可以使用一些命令行工具进行截图,如imagemagick工具。这些工具可以在终端中输入相关命令,实现全屏或自定义区域的截图。具体命令可以在终端中输入man imagemagick查看其详细的使用说明。需要注意的是,这些工具通常需要一些基础的命令行操作知识。但掌握后,将非常灵活高效。四、使用浏览器插件或...
Ubuntu系统怎么截图
对于高级用户,还可以使用一些命令行工具进行截图,如imagemagick工具。这些工具可以在终端中输入相关命令,实现全屏或自定义区域的截图。具体命令可以在终端中输入man imagemagick查看其详细的使用说明。需要注意的是,这些工具通常需要一些基础的命令行操作知识。但掌握后,将非常灵活高效。四、使用浏览器插件或...
Ubuntu截图工具有哪些?
对于高级用户,还可以使用一些命令行工具进行截图,如imagemagick工具。这些工具可以在终端中输入相关命令,实现全屏或自定义区域的截图。具体命令可以在终端中输入man imagemagick查看其详细的使用说明。需要注意的是,这些工具通常需要一些基础的命令行操作知识。但掌握后,将非常灵活高效。四、使用浏览器插件或...
ubuntu截图快捷键是什么?
对于高级用户,还可以使用一些命令行工具进行截图,如imagemagick工具。这些工具可以在终端中输入相关命令,实现全屏或自定义区域的截图。具体命令可以在终端中输入man imagemagick查看其详细的使用说明。需要注意的是,这些工具通常需要一些基础的命令行操作知识。但掌握后,将非常灵活高效。四、使用浏览器插件或...
ubuntu系统中如何截图
对于高级用户,还可以使用一些命令行工具进行截图,如imagemagick工具。这些工具可以在终端中输入相关命令,实现全屏或自定义区域的截图。具体命令可以在终端中输入man imagemagick查看其详细的使用说明。需要注意的是,这些工具通常需要一些基础的命令行操作知识。但掌握后,将非常灵活高效。四、使用浏览器插件或...