跳到主要内容

DevToolsCapability

type DevToolsCapability = "none" | "readonly" | "full";

Defined in: types.ts:70

页面授予 DevTools 的命令能力档位。

Remarks​

握手之后命令走的是私有 MessagePort(见 HandshakeMessage),但握手本身 在共享的 window 总线上:先于真 DevTools 抢答的同源脚本一样能拿到端口 (event.ports 对同 realm 的每个 message 监听器都可见)。 也就是说端口挡得住握手之后的旁听,挡不住握手当时就已经在页面里执行的脚本。 分档的意义正是让页面自己决定这种最坏情况的爆炸半径:

  • 'none':只放行连接生命周期命令(握手 / PING / CLEAR / DISCONNECT)。 不泄漏任何库内数据,也不改变任何状态。
  • 'readonly':额外放行只读遥测(INSPECT_DB / QUERY_ENTITY / GET_BRANCHES)。 会把实体数据发到页面消息总线上,但不改变数据库状态。
  • 'full':额外放行破坏性命令(DISCONNECT_RXDB / SWITCH_BRANCH / CREATE_BRANCH / DELETE_BRANCH)。

被拒绝的命令静默丢弃:回一条错误等于给伪造方一个存在性探针。 合法 DevTools 从 HANDSHAKE 载荷里读到本页档位,据此禁用对应 UI。