Skip to content

v2.3.1 — 修 2.3.0 的打包版事故:新标签页停在「正在打开…」

Choose a tag to compare

@Glittering Glittering released this 28 Oct 06:28
· 49 commits to main since this release

v2.3.1 — 修 2.3.0 的打包版事故:新标签页停在「正在打开…」

请立刻升级。 2.3.0 的打包版(/Applications 里那个、以及 dmg)有一个只在打包后
才出现的回归:任何带地址的新标签页都会永久停在占位页(「正在打开…」),打不开目标站。

源码/dev 树不受影响 —— 这正是它逃过全部 865 条测试的原因。

原因

上一版为了让"打开的目标页别被延迟的占位页导航盖回首页",在 newTab 的延迟导航里加了
一句判据:

const stillMine = !cur || cur === 'about:blank' || cur === placeholderUrl;

而 placeholderUrl 是手拼的:

'file://' + pagePath + '?' + q      // pagePath 里有空格:/Applications/AI Browser.app/...

Chromium 报回来的 getURL() 是 AI%20Browser.app,我们手里是 AI Browser.app ——
字符串相等在打包后恒为 false,于是那句判据把"还在占位页上"误判成"已经被导航走了",
真正的目标再也不加载。开发树路径没有空格,所以 e2e 全绿。

修法

两处,都在 src/shared/placeholder.cjs(新文件,纯函数):

  1. 不再手拼 file URL:pathToFileURL(),空格/中文/#/? 由它负责转义。
  2. 不再用字符串相等判断"是不是同一页":按文件名判据(basename === 'loading.html'),
    并且 http(s) 页面一律不算占位页(站点里正好有个 loading.html 不会被误判)。

新增 tests/test_placeholder.js(7 条),其中 PH-4 直接钉住"打包路径含空格"这一条 ——
它在 v2.3.0 会是红的。

顺带

  • 产物验收(npm run verify:app)在找不到按钮时会打印那个标签页的 url 与 state。
    2.3.0 那次它只会说"no clickable after 8s",而真正的原因(state=pending、
    url 还停在 loading.html)藏在没有输出的地方。
  • tools/browser.cjs(e2e 客户端)不再永久等:连接断开 / 回包超时都唤醒成一条错误。
    以前一次掉线会让套件挂到 150s 看门狗且零线索。

验证

  • vitest 74 文件 / 1031 条;e2e:all 22 套件 / 745 断言全绿。
  • npm run verify:app 在装好的 2.3.1 上 22/22(这条才是这次事故的验收标准)。