Files
reverse-skills-max/vendor-new/js-reverse-automation--skill/js-reverse-automation/references/browser-session-contract.md

56 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 浏览器会话与证据契约
真实浏览器分析不能用“端口已监听”“动作已注册”或“页面出现日志”代替成功。每次导航、注入和调用都要绑定到当前浏览器会话与当前文档,并在状态变化后重新确认。
## 操作前
1. 读取浏览器连接状态,确认连接的是用户指定的浏览器,而不是新建的临时页面。
2. 列出页面并锁定 `tabId`、当前 URL 和当前文档身份;没有稳定文档身份时,至少记录页面 URL 与导航时间。
3. 注入或修改前记录操作 ID、目标页面、脚本版本指纹和预期作用范围。
4. 页面发生导航、刷新、跨文档 iframe 切换或调试器重新连接后,旧的元素引用、调用栈、断点和注入确认全部视为失效,必须重新快照或重新注入。
## 操作中
- 超时只表示“结果未知”,不表示操作没有执行。不要盲目重放可能有副作用的登录、签名或状态修改动作;先读取状态、事件和当前文档。
- 调试器暂停时,调用、导航和注入的返回值可能只是“已排队”或“等待恢复”。必须恢复后再次读取状态,不能把旧的暂停信息当成新结果。
- 桥接断开时,清理未完成请求;重新连接后重新列页面并重新绑定文档。只有幂等的只读操作可以自动重试,登录和加密动作默认不自动重放。
- 事件、源代码和请求体采用有界读取;敏感字段默认只保留长度、哈希或脱敏预览,不能因为导出失败而放宽范围。
## 操作后
JSRPC action 级结果至少要同时出现:
- 输入明文或其明确的参数标识;
- 非空的最终请求体;
- 最终请求 route/URL;
- HTTP 状态;
- 最终业务响应。
如果浏览器控制面能提供会话信息,额外保存如下绑定:
```json
{
"session": {
"connected": true,
"tabId": 1,
"documentId": "document-generation"
},
"operation": {
"id": "operation-id",
"status": "confirmed",
"applied": true
}
}
```
`status=timeout`、`status=pending`、`applied=false`、文档身份缺失或返回中包含错误标记时,只能报告为未确认。使用 `scripts/validate_browser_evidence.py` 生成 `artifacts/browser_evidence.json`,再把它作为最终报告的验证依据。
## 最小恢复顺序
```text
读取桥接状态 → 列出页面 → 重新绑定 tab/document → 重新快照或注入
→ 触发一次动作 → 等待最终网络请求 → 导出有界证据 → 校验交付契约
```
不要用旧页面的元素引用、旧 WebSocket 请求 ID 或旧文档上的 Hook 结果替代这条恢复链。