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?”。
规范
此特性似乎未在任何规范中定义。浏览器兼容性
加载中…