view-switch-entries
✔ ensure-h5:public/h5 已是当前源码构建的,无需重建
=== A · 主题 default —— 「手机版」入口何时出现 ===
PASS 守卫[default]:桌面 UA 没有被分流
桌面1440: {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
PASS 守卫[default]:链接仍在 DOM 里(改的是显示,不是删除)
PASS 守卫[default]:桌面 UA 没有被打上 .ua-mobile
PASS 🔴 A1[default]:桌面 UA + 宽视口 → 「手机版」**不显示**
PASS 🔴 A1[default]:隐藏时**没有吊着的竖线**(分隔符和链接在同一个容器里)
PASS 守卫[default]:整行文本里确实不含「手机版」
桌面800 : {"inDom":true,"uaClass":false,"display":"inline","visible":true,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城 | 手机版","sameRow":true,"trailingPipe":false}
PASS 🔴 A2[default]:视口 ≤900px → 出现(靠视口门,不靠 UA)
PASS 🔴 A2[default]:它是 inline —— 与页脚链接行同排,不自己占一行
PASS 🔴 A2[default]:与「关于我们」在**同一条基线**上
PASS 🔴 A2[default]:整行读作「…| 手机版」
PASS 守卫[default]:jnc_view=d 时手机 UA 不被分流
手机1440: {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
FAIL 🔴 A3[default]:手机 UA → 模板打上 .ua-mobile → {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
FAIL 🔴 A3[default]:手机 UA + 宽视口 → 出现(靠 UA 门,视口门此时不命中) → {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
FAIL 🔴 A3[default]:同样并在页脚链接行里 → "关于我们 | 使用指引 | 积分商城"
PASS 守卫[default]:它指向 view_switch/to/m
=== A · 主题 blue_gaztano —— 「手机版」入口何时出现 ===
PASS 守卫[blue_gaztano]:桌面 UA 没有被分流
桌面1440: {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
PASS 守卫[blue_gaztano]:链接仍在 DOM 里(改的是显示,不是删除)
PASS 守卫[blue_gaztano]:桌面 UA 没有被打上 .ua-mobile
PASS 🔴 A1[blue_gaztano]:桌面 UA + 宽视口 → 「手机版」**不显示**
PASS 🔴 A1[blue_gaztano]:隐藏时**没有吊着的竖线**(分隔符和链接在同一个容器里)
PASS 守卫[blue_gaztano]:整行文本里确实不含「手机版」
桌面800 : {"inDom":true,"uaClass":false,"display":"inline","visible":true,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城 | 手机版","sameRow":true,"trailingPipe":false}
PASS 🔴 A2[blue_gaztano]:视口 ≤900px → 出现(靠视口门,不靠 UA)
PASS 🔴 A2[blue_gaztano]:它是 inline —— 与页脚链接行同排,不自己占一行
PASS 🔴 A2[blue_gaztano]:与「关于我们」在**同一条基线**上
PASS 🔴 A2[blue_gaztano]:整行读作「…| 手机版」
PASS 守卫[blue_gaztano]:jnc_view=d 时手机 UA 不被分流
手机1440: {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
FAIL 🔴 A3[blue_gaztano]:手机 UA → 模板打上 .ua-mobile → {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
FAIL 🔴 A3[blue_gaztano]:手机 UA + 宽视口 → 出现(靠 UA 门,视口门此时不命中) → {"inDom":true,"uaClass":false,"display":"none","visible":false,"href":"/index.php/Index/view_switch/to/m","rowText":"关于我们 | 使用指引 | 积分商城","sameRow":false,"trailingPipe":false}
FAIL 🔴 A3[blue_gaztano]:同样并在页脚链接行里 → "关于我们 | 使用指引 | 积分商城"
PASS 守卫[blue_gaztano]:它指向 view_switch/to/m
=== A0 · Vary: User-Agent 的覆盖面 ===
/Index/login → 200 Vary: User-Agent,Sec-CH-UA-Mobile,Accept-Encoding
PASS 守卫:login 页可匿名打开
PASS 守卫:它确实渲染了页脚(否则这条 Vary 断言没有意义)
PASS 🔴 A0:不走 mobileEntryRedirect 的页面也带 Vary: User-Agent
=== B · 匿名手机用户的逃生路径 ===
PASS 守卫:手机 UA 打 / 确实被自动送到 /h5/(逃生口的前提)
首页页脚: {"found":true,"text":"电脑版","h":30}
PASS 🔴 B1:H5 **首页页脚**有「电脑版」(落地页就能看到)
个人中心: {"hash":"#/pages/user_center/index","hasPc":true,"guestName":true}
PASS 🔴 B2:匿名点「个人中心」**不再**被踢到登录页
PASS 守卫:确实渲染的是未登录态(显示「访客」)
PASS 🔴 B2:未登录态下「电脑版」那一条也在
PASS 🔴 B3:点首页页脚的「电脑版」真的离开了 H5
PASS 🔴 B3:种下了 jnc_view=d
PASS 🔴 B3:再打 / 不会被弹回 H5(偏好生效)
PASS 🔴 B3:此时页脚「手机版」可见 —— 往返闭环成立
=== C · 守卫:登录用户的个人中心没被改坏 ===
✓ minted in jnc_ma (uid=990863 corp=1 client_type=50, access TTL 86400s)
登录态个人中心: {"hash":"#/pages/user_center/index","hasPc":true,"guest":false,"member":true}
PASS 守卫:登录用户仍能打开个人中心
PASS 🔴 C:登录用户渲染的是**登录态**(getUserInfo 仍在打)
PASS 守卫:登录态下「电脑版」那一条也在
────────────────
PASS=39 FAIL=6