Skip to content

[Bug] web_scan 的 active_tab 是"上次操作的tab"而非真实活跃tab(桥接扩展未上报 active 状态) #793

Description

@double-tu

环境

  • macOS + Chrome(MV3 桥接扩展 tmwd_cdp_bridge)+ conductor 模式
  • 本地与上游 main 三文件(ga.py / TMWebDriver.py / background.js)均比对一致,bug 存在于最新版

复现步骤

  1. 打开两个标签页 A、B,先让 GA 操作过 A(例如 execute_js)
  2. 用户手动切换到标签页 B,问 GA"看一下我当前的页面"
  3. 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.onActivatedwindows.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)

  1. background.jsext_ready/tabs_update 的 tabs.map 加 active: t.active, windowId: t.windowId,并加 chrome.tabs.onActivated.addListener(sendTabsUpdate)chrome.windows.onFocusChanged.addListener(sendTabsUpdate)
  2. TMWebDriver.py:tabs_update / session_info 保留 active 字段;收到 active=true 的更新时同步 default_session_id(或维护单独的 active_session_id)
  3. ga.py:web_scan 无 switch_tab_id 时跟随真实 active session;tabs 列表中给活跃 tab 加标记(如 ★)

如果维护者认可方向,我可以按上面的方案提 PR。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions