Element:ariaNotify() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

Element 接口的 ariaNotify() 方法指定一段给定的文本应在屏幕阅读器可用并激活时进行播报。

语法

js
ariaNotify(announcement)
ariaNotify(announcement, options)

参数

公告

指定要播报的文本的字符串。

options 可选

一个包含以下属性的选项对象

优先级

一个枚举值,指定公告的优先级。可能的值是

normal

公告具有正常优先级。它将在屏幕阅读器当前正在进行的任何公告之后播报。

high

公告具有高优先级。它将立即播报,中断屏幕阅读器当前正在进行的任何公告。

返回值

无(undefined)。

描述

ariaNotify() 方法可用于以编程方式触发屏幕阅读器公告。此方法提供类似于ARIA 实时区域的功能,并具有一些优势:

  • 实时区域只能在 DOM 更改后进行公告,而 ariaNotify() 公告可以随时进行。
  • 实时区域公告涉及朗读已更改 DOM 节点的更新内容,而 ariaNotify() 公告内容可以独立于 DOM 内容定义。

开发人员经常通过使用带有实时区域的隐藏 DOM 节点来规避实时区域的限制,这些节点的内容会随着要播报的内容而更新。这效率低下且容易出错,而 ariaNotify() 提供了一种避免此类问题的方法。

某些屏幕阅读器会按顺序朗读多个 ariaNotify() 公告,但这不能在所有屏幕阅读器和平台上得到保证。通常,只播报最新的公告。将多个公告合并为一个更可靠。

例如,以下调用

js
elemRef.ariaNotify("Hello there.");
elemRef.ariaNotify("The time is now 8 o'clock.");

最好合并为

js
elemRef.ariaNotify("Hello there. The time is now 8 o'clock.");

ariaNotify() 调用可以在 DOM 中的任何元素上触发,但浏览器认为对可访问性“不感兴趣”并在构建可访问性树时忽略的元素除外。具体哪些元素被忽略因浏览器而异,但列表通常包括几乎没有语义值的容器元素,例如<html><body> 元素。

ariaNotify() 公告不需要瞬时激活;您应该注意不要向屏幕阅读器用户发送过多的通知,因为这可能会造成糟糕的用户体验。

公告优先级

设置了 priority: highariaNotify() 公告会在设置了 priority: normalariaNotify() 公告之前播报。

ariaNotify() 公告大致等同于 ARIA 实时区域公告,如下所示:

  • ariaNotify() priority: high: aria-live="assertive"
  • ariaNotify() priority: normal: aria-live="polite"

但是,aria-live 公告将优先于 ariaNotify() 公告。

语言选择

屏幕阅读器根据元素lang 属性中指定的语言,或者,如果元素没有指定 lang 属性,则根据其最近祖先上设置的 lang 属性,选择适当的语音(就口音、发音等而言)来朗读 ariaNotify() 公告。如果在 HTML 中没有指定 lang 属性,则使用用户代理的默认语言。

权限策略集成

文档或<iframe>ariaNotify() 的使用可以通过aria-notify 权限策略来控制。

具体来说,如果定义的策略阻止了使用,则任何使用 ariaNotify() 创建的公告都将静默失败(它们将不会被发送)。

示例

有关更详细的示例,请参阅 Document.ariaNotify() 页面上的可访问购物清单示例。如果您在元素引用而不是 Document 对象上调用 ariaNotify(),该示例也将同样有效。

基本的 ariaNotify() 用法

此示例包括一个<button>,当点击时,它会在自身上触发屏幕阅读器公告。

html
<button>Press</button>
js
document.querySelector("button").addEventListener("click", () => {
  document.querySelector("button").ariaNotify("You ain't seen me, right?");
});

结果

输出如下:

尝试激活屏幕阅读器,然后按下按钮。您应该会听到屏幕阅读器说“You ain't seen me, right?”。

规范

此特性似乎未在任何规范中定义。

浏览器兼容性

另见