Element:ariaNotify() 方法
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
Element
接口的 ariaNotify()
方法指定一段给定的文本应在屏幕阅读器可用并激活时进行播报。
语法
ariaNotify(announcement)
ariaNotify(announcement, options)
参数
公告
-
指定要播报的文本的字符串。
options
可选-
一个包含以下属性的选项对象
返回值
无(undefined
)。
描述
ariaNotify()
方法可用于以编程方式触发屏幕阅读器公告。此方法提供类似于ARIA 实时区域的功能,并具有一些优势:
- 实时区域只能在 DOM 更改后进行公告,而
ariaNotify()
公告可以随时进行。 - 实时区域公告涉及朗读已更改 DOM 节点的更新内容,而
ariaNotify()
公告内容可以独立于 DOM 内容定义。
开发人员经常通过使用带有实时区域的隐藏 DOM 节点来规避实时区域的限制,这些节点的内容会随着要播报的内容而更新。这效率低下且容易出错,而 ariaNotify()
提供了一种避免此类问题的方法。
某些屏幕阅读器会按顺序朗读多个 ariaNotify()
公告,但这不能在所有屏幕阅读器和平台上得到保证。通常,只播报最新的公告。将多个公告合并为一个更可靠。
例如,以下调用
elemRef.ariaNotify("Hello there.");
elemRef.ariaNotify("The time is now 8 o'clock.");
最好合并为
elemRef.ariaNotify("Hello there. The time is now 8 o'clock.");
ariaNotify()
调用可以在 DOM 中的任何元素上触发,但浏览器认为对可访问性“不感兴趣”并在构建可访问性树时忽略的元素除外。具体哪些元素被忽略因浏览器而异,但列表通常包括几乎没有语义值的容器元素,例如<html>
和<body>
元素。
ariaNotify()
公告不需要瞬时激活;您应该注意不要向屏幕阅读器用户发送过多的通知,因为这可能会造成糟糕的用户体验。
公告优先级
设置了 priority: high
的 ariaNotify()
公告会在设置了 priority: normal
的 ariaNotify()
公告之前播报。
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>
,当点击时,它会在自身上触发屏幕阅读器公告。
<button>Press</button>
document.querySelector("button").addEventListener("click", () => {
document.querySelector("button").ariaNotify("You ain't seen me, right?");
});
结果
输出如下:
尝试激活屏幕阅读器,然后按下按钮。您应该会听到屏幕阅读器说“You ain't seen me, right?”。
规范
此特性似乎未在任何规范中定义。浏览器兼容性
加载中…