MV3(Manifest V3)是浏览器扩展开发中的最新规范版本,它带来了诸多变化。Quicker的浏览器扩展也将升级为MV3版本。
注意:正在开发中,以下内容可能会变更。
带来的重要变更:
- 不再支持“运行后台脚本”功能。 新增“运行后台命令”功能,封装了部分常用的chrome API,可用于实现部分原有后台脚本的相关需求。
- 必须启用浏览器的“开发者模式”,才能使用本扩展的全部功能。(这是浏览器执行userScript动态脚本的基本要求。)
- 需要Chrome135+版本。
Beta版本浏览器扩展
Beta版扩展安装网址:
https://chromewebstore.google.com/detail/quicker-connector-beta/pelcagafmpanmhhcjffhkefmehfglkhe
它在应用商店中是一个独立的扩展,在正式版更新后,Beta版扩展将被从商店移除。
在使用测试版扩展期间,请禁用原有0.7.4正式版本扩展。
移除功能:运行后台脚本
此功能不再被支持。MV3禁止了所有后台自定义脚本运行功能。
新增功能:运行后台命令
命令
- 每个命令对应一个chrome API函数。
- 命令名称的格式为
api_namespace_method
,如api_tabs_create
,对应于chrome.tabs.create
方法。 - chrome API方法通常以异步方式执行。
- 请参考源码了解目前所支持的接口:网址
- API封装,按命名空间分别保存在
/src/background/api
目录中的对应文件中。 - 对每个方法进行封装,并export。
- 在
/src/background/background-commands.js
文件的BG_COMMAND_HANDLERS
词典中,定义了命令名称与实际封装方法的映射。 - API方法通常以异步方式调用并返回结果。
命令参数
用于设定给chrome API方法传递的参数。
通常使用如下的规则:
情况一:命令参数直接传递给API
如果API方法接受的是1个参数,并且该参数为对象类型,则命令参数直接作为API方法的参数。
如 chrome.tabs.create() 方法,接收createProperties
参数,它是一个对象参数,包含url
,active
,windowId
等属性。此时,步骤参数即作为createProperties
传递给 chrome.tabs.create()
方法。
如,可以按如下格式设置命令参数
(可选参数可根据需求省略):
{
"url":"https://baidu.com"
}
情况二:命令参数封装了需要传递给API的参数。
有如下情况时,需要使用步骤参数封装API参数。步骤参数对象的每个属性,对应API方法的一个参数。属性名对应于参数名。
1)API方法需要多个参数。 如chrome.tabs.update(tabId, updateProperties)
方法,接受2个参数。此时的命令参数示例:
{
tabId: 5,
updateProperties: {
muted: true
}
}
2)API方法需要一个参数,但此参数为简单的值类型,如数字、文本等,或数组类型。如chrome.tabs.get(tabId)
方法,接受1个数字类型参数。 此时的命令参数示例:
{
tabId: 102401
}
在必要时,可以为命令传递一个参数对象。
指定参数值的几种方法
1)直接传递json文本。
2)使用表达式创建匿名c#对象,如:
$= new {
tabId = {数字变量},
updateProperties = new {
mute = true
}
}
更改的功能
对标签页运行脚本
- 改为使用
chrome.userScript
API实现。 - 新增“执行环境”参数,可选“MAIN”在网页上下文中执行,访问网页自身的js上下文。
- 新旧版本的浏览器扩展对于相同的脚本,可能存在返回结果不是特别一致的情况。
获取标签页信息
- 增加返回Manifest版本功能。
动作开发考虑
如果需要同时兼容旧版扩展和新版扩展,可以先通过“获取标签页信息”操作得到Manifest版本,再根据Manifest版本,选择使用“运行后台脚本”(版本为2时)或“运行后台命令”(版本为3时)操作类型。