Google chrome 在对话框中捕获线性导航

Google chrome 在对话框中捕获线性导航,google-chrome,accessibility,Google Chrome,Accessibility,是否有一种方法可以确保用户不会返回到使用线性导航的对话框之外。我有一个javascript,它在选项卡导航中处理这个问题 注: 线性导航:我所说的线性导航不是指使用tab键的导航,而是指屏幕阅读器提供的线性导航。(在goolge chrome中,其ChromevoxKey+箭头可向前或向后移动)。这基本上是在DOM中导航,屏幕阅读器读取DOM元素我在使用onblur事件之前已经这样做了。Onblur listener在任何模式下都可以确保保持焦点(Onblur不会在所有浏览器中冒泡,所以这可能会

是否有一种方法可以确保用户不会返回到使用线性导航的对话框之外。我有一个javascript,它在选项卡导航中处理这个问题

注:


线性导航:我所说的线性导航不是指使用tab键的导航,而是指屏幕阅读器提供的线性导航。(在goolge chrome中,其ChromevoxKey+箭头可向前或向后移动)。这基本上是在DOM中导航,屏幕阅读器读取DOM元素

我在使用onblur事件之前已经这样做了。Onblur listener在任何模式下都可以确保保持焦点(Onblur不会在所有浏览器中冒泡,所以这可能会很棘手,但也有可能)。当你的模态由于用户的某些动作而失去焦点时,只需宣布你已经将焦点重新聚焦到模态中你想要的任何元素上。从可用性的角度来看,它应该是模态中具有焦点的最后一个对象。一定要明确宣布你已经这样做了,因为这可能会引起不安,特别是对于没有站点的用户,他们希望焦点在他们刚刚指向的地方

更好的方法是在模态失去焦点时宣布模态关闭。AT用户习惯于处理模态,如果AT因为网站设计而在模态之外提供导航,AT用户将对模态关闭自己的想法非常敏感,而不再是交互的焦点。就像大多数情态动词一样,当用户点击网页的其他部分时,情态动词就会消失。除非您的模式在继续之前绝对需要注意,否则这种方法更加用户友好。特别是对于站点键盘用户,依靠ATs提供导航帮助

聚焦/模糊事件和冒泡/捕获:

在使用onblur事件之前,我已经这样做了。Onblur listener在任何模式下都可以确保保持焦点(Onblur不会在所有浏览器中冒泡,所以这可能会很棘手,但也有可能)。当你的模态由于用户的某些动作而失去焦点时,只需宣布你已经将焦点重新聚焦到模态中你想要的任何元素上。从可用性的角度来看,它应该是模态中具有焦点的最后一个对象。一定要明确宣布你已经这样做了,因为这可能会引起不安,特别是对于没有站点的用户,他们希望焦点在他们刚刚指向的地方

更好的方法是在模态失去焦点时宣布模态关闭。AT用户习惯于处理模态,如果AT因为网站设计而在模态之外提供导航,AT用户将对模态关闭自己的想法非常敏感,而不再是交互的焦点。就像大多数情态动词一样,当用户点击网页的其他部分时,情态动词就会消失。除非您的模式在继续之前绝对需要注意,否则这种方法更加用户友好。特别是对于站点键盘用户,依靠ATs提供导航帮助

聚焦/模糊事件和冒泡/捕获:

为了实现这一目标,我遇到了一个难题

屏幕阅读器将仅读取其可见的元素。因此,如果我向HTML元素添加
“aria hidden”=“true”
属性,屏幕阅读器将永远不会将线性焦点指向该元素(屏幕阅读器甚至永远不会读取div及其标记为hidden的内容)

Hack:我在
body
内将对话框显示为不同的
div
,并将主要内容保留在
body
下单独的
div
内,并在每次显示对话框时将
aria hidden=“true”
添加到主要内容
div
。一旦我关闭对话框,我就从主内容div中删除aria隐藏属性

<body>
    <div id="dialog box"> <--- This is the dialog box ----> </div>
    <div id="main content" aria-hidden="true"> <-- This is the main content --> </div>
</body>

我遇到了一个黑客来实现这一点

屏幕阅读器将仅读取其可见的元素。因此,如果我向HTML元素添加
“aria hidden”=“true”
属性,屏幕阅读器将永远不会将线性焦点指向该元素(屏幕阅读器甚至永远不会读取div及其标记为hidden的内容)

Hack:我在
body
内将对话框显示为不同的
div
,并将主要内容保留在
body
下单独的
div
内,并在每次显示对话框时将
aria hidden=“true”
添加到主要内容
div
。一旦我关闭对话框,我就从主内容div中删除aria隐藏属性

<body>
    <div id="dialog box"> <--- This is the dialog box ----> </div>
    <div id="main content" aria-hidden="true"> <-- This is the main content --> </div>
</body>


Nick的帖子可能会有所帮助:谢谢Ryan:)。事实上,我只是遵循这一点。但是没有提到线性导航。线性导航和选项卡导航是不同的。Tab导航与Tab键配合使用,其中线性导航专门用于屏幕阅读器读取dom元素的每个节点。在带有ChromeVox插件的google chrome上,可以使用Ctrl+箭头键进行操作。在手机或平板电脑上进行前向导航时,从左到右或从上到下滑动至botton,反之亦然。Nick的帖子可能会有所帮助:谢谢Ryan:)。事实上,我只是遵循这一点。但是没有提到线性导航。线性导航和选项卡导航是不同的。Tab导航与Tab键配合使用,其中线性导航专门用于屏幕阅读器读取dom元素的每个节点。在带有ChromeVox插件的google chrome上,可以使用Ctrl+箭头键进行操作。在手机或平板电脑上进行前向导航时,从左向右滑动或从上到下滑动,反之亦然,进行后向导航我很抱歉没有明确说明我的观点。我不确定“线性导航”一词是否真的正确。基本上,在任何一款安卓手机上,您可以从左向右滑动图形,AT将读取页面的下一个元素。从右到左的情况类似,