点击浏览器返回按钮时,焦点位置的决定因素探究
点击浏览器返回按钮时,焦点位置由什么决定?
我了解到部分规则由HTML规范的History API决定,具体是history.scrollRestoration的取值:
"auto"
用户代理负责在导航时恢复滚动位置。"manual"
由页面自行处理滚动位置恢复,用户代理不会自动尝试恢复。
有示例展示了"manual"的用法,但"auto"模式下的行为是否由浏览器(用户代理)的实现方式决定?如果是这样,那要让返回按钮的行为在各浏览器中保持一致,是不是必须采用"manual"模式?(前提是浏览器已正确实现History API)下面的实际测试案例似乎能印证这一点。
上下文
我们正在排查一个主要供屏幕阅读器用户(使用JAWS)的遗留Web应用,以下是测试的统一行为:
- 点击长
<table>中的客户链接,示例表格如下:
| 分配日期 | 客户 | 备注 | 讲师 | 分配人 | 状态 |
|---|---|---|---|---|---|
| 2024年4月12日 | Doe, John | blabla | Goodworker, Sally | Bigboss, Paige | 已分配 |
- 在客户页面点击一个按钮,代码示例:
<input type="button" aria-label="Plans" onclick="location.href='/plans/1234';" value="Plans" >
- 点击浏览器返回按钮,焦点表现:
- JAWS:聚焦到步骤2中的「Plans」按钮
- Chrome:聚焦到
<body>,按TAB键会跳转到页面第一个链接,而非之前点击的按钮 - Firefox:聚焦到步骤2中的「Plans」按钮
- 再次点击浏览器返回按钮,焦点表现:
- JAWS:聚焦到
<body>;按TAB键会跳转到之前用来导航离开的链接 - Chrome:聚焦到
<body>;按TAB键会跳转到下一行的链接 - Firefox:聚焦到步骤1中用来导航离开页面的链接
补充说明:
- Chrome的焦点状态通过开发者工具的焦点跟踪功能确认
- Firefox的焦点状态通过返回后在控制台执行
document.activeElement确认 - 测试发现,我们的应用中Firefox会保留滚动信息,但在测试其他页面时结果不一致:比如搜索到的第一个链接点击返回后焦点会落在该锚点,而另一个
fetch()链接点击返回后焦点会落在<body>
更新
- Chrome:已提交相关问题,被确认为bug
- Firefox:已在官方聊天渠道询问该问题
内容的提问来源于stack exchange,提问作者toraritte
相关产品推荐
相关产品推荐

