我正在开发一个JavaScript web应用程序,该应用程序具有文本编辑器组件。我们最活跃的用户之一是盲人,使用JAWS屏幕阅读器来使用我们的应用程序。他经常突出显示文本编辑器中的多行文本,将其复制并粘贴到另一个程序(Word、Outlook等(中,并抱怨屏幕阅读器在选择多行时重复文本。他按下shift和向下箭头来选择行。
他预计屏幕阅读器每次高亮显示一行时只会阅读新高亮显示的文本。例如,如果"快速的棕色狐狸跳过了懒狗"一行在单词"jump"之后被拆分为两行,当他选择第一行时,他会希望它读成"快速的褐色狐狸跳过了",然后当他再次按下向下箭头选择第二行时,它只读成"跳过了懒犬"。这就是它在微软Word和其他他大量使用的程序中的工作方式。
经过一些研究,我发现JAWS在一个段落中按预期读取所有内容,但当他选择包含空<p>
标签或内部只有<br>
的<p>
标签的行时,问题似乎就会出现(这在我们的应用程序中很常见(。举个例子,下面是我们的文本编辑器的内容可能真实的样子:
<p>This is a long line of text that will wrap
around after the first occurrence of the word "wrap"</p>
<p><br></p>
<p>And then there might be another long line of text
here that wraps around after the first occurrence of the word "text"</p>
如果他开始在顶部高亮显示,JAWS将正确读取第一行,然后在高亮显示第二行之后正确读取第二行。当他突出显示带有换行符的段落时,JAWS将再次读取前两行。当他突出显示第二段的第一行时,JAWS将再次阅读前两行,然后是第二段第一行。有趣的是,如果他高亮显示最后一行,它的行为与预期一样,只读取该行。
有人能帮助我理解我的文本编辑器的内容结构出了什么问题,导致屏幕阅读器在这种情况下重复行吗?如有任何指导,我们将不胜感激。
没有一个实际的例子很难回答,但我的理论如下:当您不高亮显示新的文本内容时,jaws会重复文本。因此它适用于<p> </p>
,因为牢不可破的空间是一些文本内容,而<p><br /></p>
不包含任何文本内容。
Jaws这样做可能是因为它不知道该对所选的新文本说什么。没有什么是不好的,因为你不知道;"empty"不正确,因为<br />
不为空;因为没有文本内容,所以没有其他事情要说。因此,Jaws开发人员选择重复之前选择的文本或至少部分结尾部分,作为最后一次重新排序。<p> </p>
中没有sisue,因为在这种情况下,Jaws可以安全正确地说出"空间"。
这更像是一个特定于下巴的问题,所以不幸的是没有什么可做的。当然,最好的方法是避免在编辑器中使用无usless代码,如<p><br /></p>
,更常见的是在元素的开头或结尾使用<br />
,或其他类似的奇怪代码,但我知道这并不容易。不同的浏览器有不同的添加空段落的方式,这取决于你如何编辑、移动或放置光标,列表、标题、表格单元格等也是如此。简而言之,很难过滤掉浏览器生成的坏代码。不过,你可以试着用最明显、最频繁的方式来做。一种可能的做法是覆盖回车键的默认行为,这样你就可以插入你想要的,而不是浏览器想要的,但在所有情况下都很难做到正确。