【问题标题】:Give focus to browser将焦点放在浏览器上
【发布时间】:2013-03-28 08:28:37
【问题描述】:

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

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

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

【问题讨论】:

  • 试试 $(window).focus() 了吗?
  • “聚焦浏览器”一般由window.focus();实现
  • @Derek & jbabey: $(window).focus() 什么都不做
  • (至少,不在 Google Chrome 中。这是在其他浏览器中测试的小提琴:jsfiddle.net/4NA5u

标签: javascript jquery focus


【解决方案1】:

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

var activeElement = document.activeElement;
if (activeElement) {
   activeElement.blur();
} else if (document.parentElement) {
   document.parentElement.focus();
} else {
   window.focus();
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 正如我所说,我想避免添加额外的可选项卡组件,除非它们对键盘不可见;这种方式意味着用户需要额外按 Tab 键才能过去。所以我会等着看是否有人有其他方法。
    • 好吧,没有人有更好的主意,所以我现在就这样做。
    • 如何将焦点放在任何可聚焦的元素上,然后立即模糊它?
    • 我想最终效果是从 Flash 电影中移除焦点。
    猜你喜欢
    • 2017-06-28
    • 1970-01-01
    • 2017-01-04
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多