我正在尝试改善现有应用中的辅助功能,我注意到当我的路线发生变化时,浏览器焦点保持不变。我的期望是重点放在页面的第一个元素中,以便我可以利用跳过链接等类似的东西。
问题:有没有办法使用react-router重置浏览器焦点(模拟页面刷新)?
更新1:
我尝试添加document.activeElement.blur()
这似乎有所帮助,但无法在Chrome中使用。
更新2:
实际上,即使删除document.activeElement.blur()
后,它似乎也适用于Safari。我想知道这是否与react-router
答案 0 :(得分:3)
我最终选择的解决方案是更新我的反应容器以tabindex="-1"
并在document.getElementById('content').focus()
内调用onUpdate
。这对我来说就像是一个黑客,所以我不确定这是否是正确的解决方案。
<强>的index.html 强>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta charset="UTF-8">
<title>Todo App</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta name="mobile-web-app-capable" content="yes">
</head>
<body>
<div id="content" tabindex="-1" />
<script src="index.js"></script>
</body>
</html>
<强> index.js 强>
import React from 'react';
import ReactDOM from 'react-dom';
import { Router, browserHistory } from 'react-router';
import routes from './routes';
let element = document.getElementById('content');
ReactDOM.render(<Router onUpdate={() => document.getElementById('content').focus()}
history={browserHistory} routes={routes} />, element);
答案 1 :(得分:0)
这个问题有点老了,但我仍然会分享我所做的事情。我在想让重点放在导航上的组件上使用了autofocus
道具。我认为在React上使用道具比访问更自然