环境
- macOS + Chrome(MV3 桥接扩展 tmwd_cdp_bridge)+ conductor 模式
- 本地与上游 main 三文件(ga.py / TMWebDriver.py / background.js)均比对一致,bug 存在于最新版
复现步骤
- 打开两个标签页 A、B,先让 GA 操作过 A(例如 execute_js)
- 用户手动切换到标签页 B,问 GA"看一下我当前的页面"
- GA 调 web_scan,返回的 active_tab 是 A,扫描的也是 A 的内容
根因分析(三层链路,active 信息全程丢失)
1) 桥接扩展推送链路不带 active 字段
assets/tmwd_cdp_bridge/background.js:359(ext_ready)和 :414(tabs_update)都只发 {id, url, title}
- 且只监听
onUpdated(complete) / onRemoved / onCreated,没有监听 chrome.tabs.onActivated 和 windows.onFocusChanged,切 tab 时不触发任何推送
- 讽刺的是
cmd:'tabs' 查询处理器(约 :232)其实已经返回 active/windowId 字段——数据在扩展里就有,只是推送链路丢了
2) TMWebDriver.py 不保留 active 信息
_register_client(:182)if self.default_session_id is None: self.default_session_id = session_id —— default 只在第一个 tab 注册时固化,之后用户切 tab 不更新
- session_info 构造时也丢弃了 extra 字段
3) ga.py 把陈旧的 default 当作活跃 tab 报告
ga.py:139: "active_tab": driver.default_session_id —— 这其实是"上次操作过的会话",不是用户当前正看的 tab
影响
- 多 tab 场景下 GA 对"当前页面"的理解系统性错位,用户需手动 switch_tab_id 纠正
- 侧边栏/对话式交互("看看我正在看的页面")这个最自然的用法直接不可用
修复建议(三处小 patch)
- background.js:
ext_ready/tabs_update 的 tabs.map 加 active: t.active, windowId: t.windowId,并加 chrome.tabs.onActivated.addListener(sendTabsUpdate) 与 chrome.windows.onFocusChanged.addListener(sendTabsUpdate)
- TMWebDriver.py:tabs_update / session_info 保留 active 字段;收到 active=true 的更新时同步 default_session_id(或维护单独的 active_session_id)
- ga.py:web_scan 无 switch_tab_id 时跟随真实 active session;tabs 列表中给活跃 tab 加标记(如 ★)
如果维护者认可方向,我可以按上面的方案提 PR。
环境
复现步骤
根因分析(三层链路,active 信息全程丢失)
1) 桥接扩展推送链路不带 active 字段
assets/tmwd_cdp_bridge/background.js:359(ext_ready)和:414(tabs_update)都只发{id, url, title}onUpdated(complete)/onRemoved/onCreated,没有监听chrome.tabs.onActivated和windows.onFocusChanged,切 tab 时不触发任何推送cmd:'tabs'查询处理器(约 :232)其实已经返回active/windowId字段——数据在扩展里就有,只是推送链路丢了2) TMWebDriver.py 不保留 active 信息
_register_client(:182)if self.default_session_id is None: self.default_session_id = session_id—— default 只在第一个 tab 注册时固化,之后用户切 tab 不更新3) ga.py 把陈旧的 default 当作活跃 tab 报告
ga.py:139:"active_tab": driver.default_session_id—— 这其实是"上次操作过的会话",不是用户当前正看的 tab影响
修复建议(三处小 patch)
ext_ready/tabs_update的 tabs.map 加active: t.active, windowId: t.windowId,并加chrome.tabs.onActivated.addListener(sendTabsUpdate)与chrome.windows.onFocusChanged.addListener(sendTabsUpdate)如果维护者认可方向,我可以按上面的方案提 PR。