4

我正在研究键盘可访问性。我有一个位于页面内的 flash 对象,为了阻止焦点被困在其中,我添加了ExternalInterface与一些 JavaScript 函数对话的选项卡侦听器。

JavaScript 使用 a 查找下一个可用元素tabIndex并调用focus()它。到现在为止还挺好。但是,如果插件是页面上的最后一个可选项卡(或反向选项卡时的第一个),则没有可切换到的元素。通常这会将焦点设置在浏览器窗口上,所以我想保持这种行为。

因此我的问题是:是否可以以编程方式将焦点放在浏览器的 chrome 上?如果我可以同时模仿前后制表符那就更好了。如果可能的话,我还想避免在 flash 之前/之后添加额外的 tabbable 组件,除非我可以使它们对鼠标键盘都有效地不可见。

4

2 回答 2

3

在我自己寻找类似答案时遇到了这个问题。如果要释放当前焦点元素上的焦点,请使用 document.activeElement;如果您想在不支持的情况下进行后备,请使用焦点在文档的父元素上。据我所知,这应该支持所有已知的浏览器:

var activeElement = document.activeElement;
if (activeElement) {
   activeElement.blur();
} else if (document.parentElement) {
   document.parentElement.focus();
} else {
   window.focus();
}
于 2014-03-31T20:01:17.023 回答
0

在文档顶部将焦点设置为没有文本内容的虚拟锚点似乎有效:

document.getElementsByTagName('a')[0].focus();

http://jsfiddle.net/4NA5u/1/

于 2013-04-05T19:50:19.800 回答