Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用javascript来检测屏幕阅读器是否在用户机器上运行?_Javascript_Html_Accessibility_Screen Readers - Fatal编程技术网

是否可以使用javascript来检测屏幕阅读器是否在用户机器上运行?

是否可以使用javascript来检测屏幕阅读器是否在用户机器上运行?,javascript,html,accessibility,screen-readers,Javascript,Html,Accessibility,Screen Readers,我想检测屏幕阅读器是否在用户的机器上运行,以避免与html中的音频标记发生声音冲突。如果是这样的话,请详细说明如何做到这一点。您可能不应该尝试做任何特殊的事情,即使您可以检测到屏幕阅读器正在运行。即使你对一组屏幕阅读器用户的理解是正确的,你也可能对另一组用户的理解是错误的。首先,最好专注于编写好的、干净的HTML5 请注意,并非所有屏幕阅读器用户都使用文本转换语音;许多人使用盲文输出。此外,其他类型的可访问性工具(如内容高亮显示器和语音输入应用程序)使用与屏幕阅读器相同的技术和API(如DOM、

我想检测屏幕阅读器是否在用户的机器上运行,以避免与html中的音频标记发生声音冲突。如果是这样的话,请详细说明如何做到这一点。

您可能不应该尝试做任何特殊的事情,即使您可以检测到屏幕阅读器正在运行。即使你对一组屏幕阅读器用户的理解是正确的,你也可能对另一组用户的理解是错误的。首先,最好专注于编写好的、干净的HTML5

请注意,并非所有屏幕阅读器用户都使用文本转换语音;许多人使用盲文输出。此外,其他类型的可访问性工具(如内容高亮显示器和语音输入应用程序)使用与屏幕阅读器相同的技术和API(如DOM、MSAA),因此任何“检测屏幕阅读器”的技术都可能检测到这些,因此您不能假设这意味着用户完全失明,只使用语音

就目前的情况而言,音频标签目前并不是普遍可访问的,不同的浏览器具有不同级别的可访问性支持-有关当前支持的更多详细信息,请参阅并向下滚动至音频。我看到一些页面在音频标签后添加了基于HTML5的控件和javascript,这样他们可以提供自己的UI,以确保键盘或屏幕阅读器用户可以根据需要播放/停止音频。(最终,当浏览器迎头赶上时,应该不需要这样做。)


就一般的可访问性而言,wcag2.0()建议任何自动播放超过3秒的音频都应该有一个可访问的暂停或停止音频的方法。(我甚至更进一步,建议不要使用任何自动音频-当使用选项卡式浏览时,通常无法确定音频来自哪个选项卡。)

使用javascript无法检测屏幕阅读器,使用任何客户端技术都无法检测屏幕阅读器。您可以使用Flash检测运行客户端的软件。关于它如何工作以及为什么它不有用且不应用于检测屏幕阅读器的更多详细信息,请参见此处:

虽然可能不是一种完全可靠的方法,但当用户浏览内容时,可以使用焦点事件通过javascript检测屏幕阅读器的进度

一个隐藏的“跳过导航链接”(skip-navigation link),如果它被聚焦,将是检测是否有人在使用屏幕阅读器的一种方法


尽管它没有解决问题的音频部分,但我只是想提供部分解决方案,因为我正在寻找可能的方法来检测屏幕阅读器。

+1。我没有这方面的经验,但是一个支持
标签的屏幕阅读器肯定会想出一种避免碰撞声音的方法?当然,这将是他们的核心功能?通常无法检测屏幕阅读器是否正在运行。(即使某些辅助功能技术正在运行,也可能不是基于音频的屏幕阅读器:它可能是基于盲文的屏幕阅读器,或者是使用与屏幕阅读器相同技术的命令和控制语音控制应用程序。)如果你能确定屏幕阅读器正在运行,你想做什么不同的事情?@billthelizard,如果你能提供删除评论的理由,那会很有帮助。那些使用键盘导航而不使用屏幕阅读器的人呢?@stevax,据我所知,除了所描述的常见IE怪癖,无论您是否使用屏幕阅读器,使用键盘导航都意味着焦点事件。例如,Safari的辅助画外音在使用键盘浏览内容时确实会应用焦点。当用户在页面中使用tabindex时,可以使用tabindex按顺序强制关注特定元素。也许我在评论中不清楚。我想说的一点是,不可能区分屏幕阅读器用户和出于其他原因(可能是相关原因)使用键盘导航而不使用屏幕阅读器的人,而试图以这种方式瞄准屏幕阅读器用户可能会带来很大的伤害。我明白你的意思。“显示:无”,屏幕阅读器看不见也是一个障碍。然而,一种可行的方法是在连续的3个元素内将中间元素标记为aria hidden=“true”或aria disabled=“true”。如果元素1和3接收到焦点,则表示正在使用辅助技术(跳过了一个),而不是简单的键盘导航。因为我没有预见到任何键盘导航工具或插件会应用任何WAI-ARIA相关的状态或属性。下面是一些检测javascript事件差异(屏幕阅读器、键盘用户和鼠标用户之间)的示例代码(可能已经过时),请您解释为什么会出现向下投票?这个答案有什么可以改进的吗?我不是反对者,但我能想到的一个例子是,如果你正在编写一个框架,提供一些基本的控制,比如带有附加选择器的日期输入。对于移动平台或屏幕阅读器,您可能希望使用输入[type=date]。这是黑客,但不难发现手机;屏幕阅读器也会被这个问题所涵盖。我也不是向下投票者——在我的例子中,我有一个功能完善的原生选择下拉列表,它的工作原理与屏幕阅读器一样好。但当我用selectric这样的插件“增强”它时,它突然对屏幕阅读器毫无用处。如果我知道屏幕阅读器正在发挥作用,我永远不会启动selectric,每个人都会更高兴。我不能否决投票,但在我的情况下,我想有两个不同的表,有很多数据,一个用于屏幕阅读器,有正常的标记和内容,另一个用于使其在响应视图中更好。正如Garrett Dimon所说:“数据表在响应性设计方面做得不太好,只是说说而已。”