从列表点进详情,内容换了但浏览器标签页标题还是站名,读屏用户靠标题确认位置,结果发现一点变化都没有。乍看像缓存或者权限的锅,追下去往往不是。
document.title = '订单详情 - 站点名'
document.querySelector('h1').focus()
<div aria-live='polite' class='sr-only'></div>
追下去是这么回事:路由切换只替换了组件,document.title 和焦点都没有动,读屏不会主动播报内容已经变了,用户以为刚才那次点击没生效,于是又点了一下。
「单页应用标题更新」相关的日志我一般连着看前后五分钟,单看一条报错经常判断不出是哪一步失败。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。
具体做法是,每次路由变化后都按当前页面更新 document.title,别停在站名;把键盘焦点移到新页面的主标题上,让位置有变化;用 aria-live 的区域播报一句页面已经切换完成,让读屏知道。
验收就看一点,连续切换三个路由,标签页标题和焦点每次都要跟着一起变。
