fix(身份): 宿主未注入 openid 时给出可见提示 + jumpApp 带 __no_identity 标记 (v26092008)

背景(2026-09-20 线上排查):小程序首页壳拿不到 openid 时会**匿名加载**本页,
页面照常渲染但全是占位(孕周 `--`、档案查不到),而跳应用时 jumpApp 因为没有身份
就跳**裸 URL** —— 从商城返回首页加载本页时很容易被误判成「数据丢了」。
根因在小程序侧(App.vue 丢掉无 token 分支的 openid;首页壳没有像 web_view 那样的
silenceAuthNoLogin 兜底),H5 这侧先做**可见 + 可观测**两件缓解:

· 新增顶部提示条(#idNotice):仅在没有 openid 时显示,文案「未获取到微信身份,
  页面数据可能不完整」;带「重试」按钮(location.replace 换 URL 重载,重试过一次后
  文案升级为「请退出小程序后重新进入」,状态落 sessionStorage,活过那次跳转)。
  有身份加载时(applyRemoteProfile 拿到 openid)自动隐藏。
  ⚠️ 刻意不做自动轮询/自动 reload:宿主只在它自己重设 web-view src 或 onShow 时注入身份,
     页面自己刷同一 URL 并不会让身份出现,反而可能循环。
· jumpApp():一个身份都没有时显式带 `__no_identity=1` —— 目标应用能区分「宿主没注入身份」
  与「参数被平台丢了」,nginx/后端日志里也能一眼查到(排查 openid 为空的关键指纹)。

验证(本地代理 + 浏览器):访客态提示可见且默认文案正确;有 openid 时隐藏;
点重试后 URL 变 `?t=…`、提示仍在且文案升级;点宫格:无身份 → `…/?__no_identity=1`,
有身份 → `?openid=…&unionid=…`(无标记);卡片/红点/资源库 8 份/弹窗/我的页/tab 顺序
全部回归正常,errors 与 console 为空。
This commit is contained in:
2026-09-20 23:08:26 +08:00
parent 340fc911b1
commit 932e42e050
3 changed files with 90 additions and 2 deletions

View File

@@ -2099,3 +2099,24 @@ a.skip:focus{left:16px;top:16px}
/* 「关于妈妈盒子」页底部版本号 */
.about-ver{margin-top:24px;padding-bottom:34px;text-align:center;color:#C9BFB8;font-size:11px;letter-spacing:.5px}
/* ---- 身份未就绪提示(2026-09-20)----
宿主没注入 openid 时显示(见 index.html 里那段注释)。绝对定位在 .phone 顶部,
z-index 高于 tabbar(60)、低于 modal(120+),避免盖住弹窗。 */
.id-notice{
position:absolute;left:26px;right:26px;top:calc(10px + env(safe-area-inset-top));z-index:66;
display:flex;align-items:center;gap:8px;padding:9px 12px;border-radius:14px;
background:rgba(255,246,232,.97);border:1px solid #F2D8AE;color:#8A5A18;
box-shadow:0 6px 18px rgba(150,110,60,.16);font-size:12.5px;line-height:1.3;
}
.id-notice.hide{display:none}
.idn-ico{
flex:0 0 auto;width:18px;height:18px;border-radius:50%;background:#E8A33D;color:#fff;
font-size:12px;font-weight:800;display:grid;place-items:center;
}
.idn-txt{flex:1;min-width:0}
.idn-retry{
flex:0 0 auto;border:0;background:#E8A33D;color:#fff;font-weight:700;
font-size:12px;padding:6px 12px;border-radius:9px;
}
.idn-retry:active{transform:scale(.95)}