在 URL、请求方法、请求体之外,把规则的生效范围进一步限定到具体的浏览器上下文:只在指定的标签页、窗口或标签组里生效。
这不只是便利性,更是安全考量:像 Authorization、Cookie 这类敏感 Header 改写,若对全部标签页生效,很容易把 token 误发到不该发的站点。限定作用域后,规则只在你选定的范围内生效。
| 类型 | 说明 |
|---|---|
all-tabs |
全部标签页(默认,不限制) |
tab |
仅指定的标签页 |
window |
仅指定窗口下的标签页 |
tab-group |
仅指定标签组下的标签页 |
tab / window / tab-group 均可多选。作用域为「全部标签页」时等价于不限制(规则不携带 scope 字段)。
规则编辑器「对哪些请求生效」下的高级(选填)面板里有「作用域」一栏,会实时列出当前打开的标签页 / 窗口 / 标签组供勾选。因为管理页是独立整页、没有「当前标签」的概念,所以采用列表勾选而非「锁定到当前标签」。
标签页 / 窗口 / 标签组的 ID 都是会话级的:浏览器重启后会失效。已选但已关闭的对象会在列表里标注「已关闭」,方便识别与清理。对安全用途而言这是 fail-closed 的——目标失效后规则不再命中,不会把敏感请求误发出去。
作用域对两条执行通道都生效,但底层机制不同:
tabId,先向后台请求自身标签上下文,再用 matchScope 过滤掉不在作用域内的规则,只把命中的规则推送给页面拦截脚本。标签被移入 / 移出分组、跨窗口移动后,后台会主动下发新的上下文,过滤保持实时。declarativeNetRequest 只有 session 规则支持 tabIds 条件(且没有 window / group 条件),因此窗口 / 标签组作用域会先解析成它当前包含的标签页集合。不限定作用域的规则仍走可跨浏览器重启保留的 dynamic 规则;限定作用域的规则改走 session 规则,并在标签的创建 / 关闭 / 移动 / 归组事件后重新计算 tabIds。作用域当前没有任何匹配标签时,规则不注册(fail-closed)。作用域是规则的可选条件(scope),与 URL、方法、请求体条件并列:
| 字段 | 说明 |
|---|---|
scope.type |
作用域类型:all-tabs / tab / window / tab-group |
scope.targets |
目标对象列表;每项 { id, label },id 为浏览器运行时数字 ID,label 仅用于展示 |
导入 / 导出配置时 scope 会被完整保留与校验;由于目标 ID 是会话级的,导入到其他设备 / 会话后可能需要重新选择目标对象。
chrome.tabGroups(tabGroups 权限),Chromium 系可用;Firefox 无该 API,标签组选项会为空,标签页 / 窗口作用域不受影响。tabIds 条件为 Chromium 系完整支持。