Repository navigation
v2.3.1 — 修 2.3.0 的打包版事故:新标签页停在「正在打开…」
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(新文件,纯函数):
- 不再手拼 file URL:
pathToFileURL(),空格/中文/#/?由它负责转义。 - 不再用字符串相等判断"是不是同一页":按文件名判据(
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(这条才是这次事故的验收标准)。