Skip to content

fix(bsk): keep controlled tabs progressing in background | 支持受控标签页在后台持续执行 - #249

Merged
iuyo5678 merged 5 commits into
mainfrom
fix/background-tab-execution
Sep 18, 2026
Merged

iuyo5678 merged 5 commits into
mainfrom
fix/background-tab-execution

Conversation

@Ljy-0827

Copy link
Copy Markdown
Collaborator

问题

BrowserSkill 在非活动标签页中处理任务时,页面可能已经完成文档和数据加载,但依赖可见性或 requestAnimationFrame 的初始化仍被阻塞。用户手动选中标签后,页面才继续更新,导致自动化无法获得有效观察。

修改

  • 为明确创建或借用的目标建立后台运行策略,使用 Emulation.setFocusEmulationEnabled 推进页面执行,不通过选中标签或聚焦窗口恢复页面。
  • 新建网页先创建 about:blank,策略生效后再导航,避免初始脚本因 hidden 跳过初始化。
  • 在受控目标首次观察、导航或输入前建立策略,并在跨命令期间持续保持。
  • debugger 重连后重新应用策略;归还或 Session 清理时释放。被动读取不授予运行策略。
  • 借用标签后不再主动选中它;同步技能说明,要求后续命令显式传递 --tab-id
  • 补充作用范围、取消、释放失败、重连及后台观察—输入回归测试。

Related to #230

@Ljy-0827

Copy link
Copy Markdown
Collaborator Author

修复:受限后台页的导航恢复与连续跳转

  • 问题: 后台标签页停留在 chrome://newtab/ 等受限页面时,CDP 无法访问当前文档,导致导航到普通网页失败。新标签页还可能只有 pendingUrl,且旧文档的提交、取消事件会与新导航交错,造成误判。若将等待固定到首个文档,正常的客户端跳转也会被拒绝或持续等待旧文档。
  • 解决: 导航根据 url 和 pendingUrl 选择执行路径,受限源页通过浏览器原生 API 离开,并在目标文档提交后及时建立后台执行能力。等待期间跟随同一受控主框架的当前文档,使旧文档事件及异步结果失效,同时保留控制权检查和统一超时,不激活标签页或聚焦窗口。

@Ljy-0827
Ljy-0827 force-pushed the fix/background-tab-execution branch from e8f4d94 to 47a4811 Compare September 15, 2026 11:19
@Ljy-0827
Ljy-0827 marked this pull request as ready for review September 15, 2026 11:24
@Ljy-0827
Ljy-0827 requested a review from iuyo5678 September 15, 2026 11:55
@Ljy-0827
Ljy-0827 force-pushed the fix/background-tab-execution branch from 47a4811 to bd603e4 Compare September 16, 2026 03:05
@Ljy-0827
Ljy-0827 force-pushed the fix/background-tab-execution branch from bd603e4 to d3f9e91 Compare September 17, 2026 07:37
@Ljy-0827

Copy link
Copy Markdown
Collaborator Author

补充修复

1. 导航取消后不再永久废弃当前页面

原先把“请求跳转”直接当作“新文档已替换旧文档”。如果跳转随后取消,当前页面仍存在,但其加载事件已被忽略,导致等待超时。
现在区分两个阶段:

  • 请求阶段:保留当前文档及加载进度,记录待定导航。
  • 提交阶段:新文档真正提交后,才废弃旧文档。
  • 后继请求结束或发生同文档跳转时,核对实际文档身份,再恢复当前页面的等待。
  • 异步核对带版本校验,防止晚返回结果错误完成新文档的等待。
    CDP 与浏览器级恢复路径均已调整;显式导航失败仍保留错误语义,没有统一忽略 ERR_ABORTED。

2. 恢复借用后的默认目标兼容性

借用成功后恢复原有的选中借入标签行为,使随后省略 tab_id 的命令仍操作该页面;同时建立后台执行策略,支持页面之后进入后台继续执行。
这不会额外聚焦窗口,也没有改变 tab create --no-active。skill 已同步说明这一边界。

3. 创建失败时独立回收资源

释放控制关系与关闭标签分别尝试:

  • 释放失败也继续关闭标签。
  • 关闭成功才删除创建记录。
  • 关闭失败保留记录供后续清理。
  • 返回结果保留初始化错误和清理错误,便于定位残留资源。

@Ljy-0827
Ljy-0827 removed this pull request from stack #251 September 17, 2026 08:03
@iuyo5678

Copy link
Copy Markdown
Collaborator

F2 修复已提交:#280,目标分支是本 PR 的 fix/background-tab-execution

改动仅涉及导航等待缓存及对应回归测试:当前文档一旦达到本次等待条件,就保留该生命周期事件,避免被后续 paint 等事件覆盖;后继文档提交时仍清空缓存,原有取消核对和文档身份检查保持不变。

验证结果:新增的三个进度保留用例在原代码上均超时,修复后通过;完整扩展测试 1808 项通过,lint、类型检查和构建通过。本机 Chrome 153.0.8010.50 中,HTTP 204 + 持续 fetch 的 6 个 F2 场景全部在约 1.4 秒返回 load,包括默认 30 秒超时用例;真实后继文档提交的对照也通过。浏览器验证覆盖实际导航函数与真实 CDP 事件,未覆盖完整 CLI/扩展传输链路。

可以先将 #280 合入本分支,再继续本 PR 的最终合并。F1 仍属于未取得真实 Chrome 复现证据的风险,本次修复未扩展到该问题。

…progress

fix(navigation): preserve readiness across cancelled redirects
@iuyo5678
iuyo5678 merged commit 66bcf8c into main Sep 18, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Background tabs may not finish rendering until activated | 后台 Tab 需激活后才能完成页面渲染

3 participants