推送 JAWS 以阅读更新的标题或文本

Push JAWS to read updated title or text

我需要按下 JAWS 屏幕 reader 来读出一个新的页面标题,假设 10 秒后更新。 不幸的是,这个问题看起来并不那么微不足道。

无论属性如何,JAWS 都忽略了在 <head> 中使用 javascript 动态设置标题。

推送我发现的更新标题的唯一可能方法是将标题文本设置为单独的(从眼睛隐藏但不是从 JAWS 隐藏)div 在 body 和设置这样的属性:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>This is a default title</title>
</head>
<body>
<div>some page text</div>
<script>

    setTimeout(function(){ 
        let titleElement = document.head.querySelector('title');
        titleElement.setAttribute('aria-live', 'assertive');
        titleElement.setAttribute('role', 'banner');
            document.title='This new title wont be read by JAWS';
            
            
            document.getElementsByTagName('body')[0].innerHTML += '<div id="idChild2f5" class="sr-only" role="alert">This new text will be read by JAWS</div>';
        }, 10000
    );
</script>

</body>
</html>

但是,在这种情况下,JAWS 发音为 ALERT。根本不适合标题。

是否有任何选项可以使 JAWS 仅发音为“此新文本将由 JAWS 读取”而不包含 ALERT 一词? aria-live 断言属性没有帮助,如果文本是动态的(延迟 10 秒),JAWS 根本不会为我阅读它。 P.S。 sr-only Bootstrap class 用来隐藏文字

JAWS 用户可以使用 Ins+T 快捷键听到页面标题,但这不是您要问的.除非被告知设置了新标题,否则用户不会知道他们需要按下该键,这是您的主要问题。但我想指出关键作为仅供参考。

你走在正确的轨道上。更改 <title> 默认情况下不会公布。它不是预期为动态的 HTML 元素,因此您必须手动通知辅助技术已进行更改。

(我提到“辅助技术”是因为 JAWS 只是屏幕的一个品牌 reader 而屏幕 reader 只是一种辅助技术。一些盲人用户使用 refreshable braille displays并且不会有屏幕 reader。他们也应该知道 <title> 的变化。我下面的评论对所有辅助技术都足够通用。)

您将需要使用“live region”,您正试图这样做,但您需要了解一些关于实时区域的信息。

  1. 动态添加实时区域的支持参差不齐,就像您在示例中所做的那样。理想情况下,实时区域应该在加载时存在于页面上。加载页面时,它应该是 DOM 的一部分。您可以有一个空的实时区域,稍后可以动态添加文本。
  2. 您可以使用 aria-live and setting the value to "polite" or "assertive" or you can use a role that provides an implicit live region such as alert, log, marquee, status, or timer.
  3. 创建实时区域

对于您的情况,一个简单的 aria-live="polite" 就足够了。这将通过 not 在进行更新时宣布“警报”来解决您的第一个问题。

<div class="sr-only" aria-live="polite" id="newtitle">
</div>

更改页面标题后,您可以在 newtitle 元素中插入文本,辅助技术将收到通知。如果您使用的是 JAWS 或 NVDA 或画外音,您会听到朗读的文本。如果您使用的是可刷新的盲文设备,新文本将显示在盲文设备上。

我不确定您是否希望实时消息说“已设置新标题”,以便用户再次知道 re-read 页面标题(使用适当的快捷键屏幕 reader) 或者文本是否应该是新标题的实际文本。由你决定。

<div class="sr-only" aria-live="polite" id="newtitle">
  A new page title has been set. Use your assistive technology to read the page title again.
</div>

<div class="sr-only" aria-live="polite" id="newtitle">
  New page title
</div>

如果您的页面标题可以多次更新,那么您还需要aria-atomic="true"

<div class="sr-only" aria-live="polite" aria-atomic="true" id="newtitle">
</div>

没有 aria-atomic,只会公布更改的文本。因此,如果您将“新页面标题”添加到活动区域,它就会被正常阅读。但是,如果您随后将其更改为“另一个新页面标题”,则只会宣布“另一个”一词,因为这是与之前更改唯一不同的地方。

使用 aria-atomic="true"所有 将读取您插入的文本。