fix(web): embed 模式登录页一闪而过 — body 首行同步隐藏 #login
#login 默认 display:flex(带 login-in 动画),加 body.embed-mode 隐藏它的 embedInit() 在 body 末尾才执行;单文件 3800+ 行,浏览器常在解析到底部脚本前 就先把登录卡画出来,造成"一闪而过"。改法:在 <body> 第一行加一段同步内联脚本, ?embed=1 时立即 add embed-mode,赶在 #login 解析/绘制之前隐藏它。 只是绘制闸门,底部 embedInit(postMessage 握手 / embed-waiting / token 分支) 完全不动,embed-mode 幂等。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4c1a26cee8
commit
33bea27d85
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
> 配合 `DESIGN.md`。本文件只记 phase 状态、决策偏差、文件量、下一步。每条 1-2 句:做了啥 + 关键判断;细节查 `git log` / `git diff` / `DESIGN §7.9`。
|
||||
|
||||
最后更新:2026-06-01(update.sh 加自更新重跑守卫修"改源仍报旧错";默认源改腾讯/避开阿里滞后卡 litellm;build 跳过改 --skip-build;pip 不静默,build 默认 TTY UI)
|
||||
最后更新:2026-06-02(修 embed 模式登录页一闪而过 — #login 在 embedInit 标记 embed-mode 前先被绘制,提前到 body 首行同步隐藏)
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -21,6 +21,10 @@
|
|||
|
||||
## 已完成关键能力
|
||||
|
||||
### 2026-06-02
|
||||
|
||||
- **修 embed 模式"登录页一闪而过"(绘制时机,非鉴权)**:`web/static/dev.html` 的 `#login` 默认 `display:flex` 且带 `login-in .35s` 动画,而加 `body.embed-mode`(→ CSS 隐藏 `#login`)的 `embedInit()` 在 body 末尾才跑;单文件 3800+ 行,浏览器常在解析到底部脚本前就先把登录卡画出来 → 闪一下。改法:在 `<body>` 第一行加一段同步内联脚本,`?embed=1` 时立即 `document.body.classList.add("embed-mode")`,赶在 `#login` 解析/绘制之前隐藏它 → 根本不绘制。只是"绘制闸门",底部 `embedInit()`(postMessage 握手 / `embed-waiting` 覆盖层 / token 分支)完全不动,`embed-mode` 幂等。未提前加 `embed-waiting`(有 stored token 时 `embedInit` 走 `enterApp` 不移除等待层会卡死,故等待层决定仍留底部按 token 判)。**bug 修复,DESIGN 不动;URL 参数/命令/env 无变化,RUN 不动**。
|
||||
|
||||
### 2026-06-01
|
||||
|
||||
- **`deploy/update.sh` 加自更新重跑守卫(修"改了源仍报旧错"根因)**:脚本 `git pull` 会改自己 —— 变量默认值在 pull 前已求值、bash 又按字节偏移边读边跑,所以**首次拉到"改 update.sh"的提交那一轮,跑的还是旧脚本的过期行为**(默认源还是阿里 → litellm 仍报缺版本)。改法:pull 后 `git diff --quiet OLD NEW -- deploy/update.sh` 检出本脚本有变更,就 `exec env ZCBOT_UPDATE_REEXEC=1 bash $0 "${ORIG_ARGS[@]}"` 用新版本从头重跑(原始参数原样回传,标记防死循环;pull 幂等,重跑里 pull 变 no-op)。**纯运维脚本,DESIGN 不动**;`RUN.md` §部署 SOP 加一条要点。
|
||||
|
|
|
|||
|
|
@ -775,6 +775,18 @@
|
|||
</head>
|
||||
<body>
|
||||
|
||||
<!-- ───── 预渲染闸门:embed 模式必须在 #login 解析前标记 body ─────
|
||||
#login 默认 display:flex(且带 login-in 动画),而 embedInit() 在 body 末尾才跑;
|
||||
单文件很长,浏览器常在跑到底部脚本前就先把登录卡画出来 → "登录页一闪而过"。
|
||||
这里同步读 ?embed=1 并提前加 embed-mode(CSS 即把 #login 隐藏),底部逻辑不变。 -->
|
||||
<script>
|
||||
try {
|
||||
if (new URLSearchParams(location.search).get("embed") === "1") {
|
||||
document.body.classList.add("embed-mode");
|
||||
}
|
||||
} catch (e) {}
|
||||
</script>
|
||||
|
||||
<!-- ───── login overlay ───── -->
|
||||
<div id="login">
|
||||
<div class="card">
|
||||
|
|
|
|||
Loading…
Reference in New Issue