最近、スクリーンリーダーのユーザーとWebサービスの画面の動作確認をしていて、興味深い挙動の違いを発見したので書き留めておきます。この情報は初心者向けのものではありません。
これを発見したのは、(<dialog> 要素を使わず) aria-modal="true" によって表現されたモーダルダイアログが表示されている状態を動作確認したときでした。その画面の構造を模式的に表現すると以下のようになります。
<div aria-modal="true" role="dialog">
ここがモーダルダイアログで、いろいろ操作できる
</div>
<div aria-live="assertive">
ここがライブリージョンになっていて、ダイアログ内の操作へのフィードバックが記載される
</div>
ライブリージョンの部分はいわゆる visually-hidden や sr-only のような、視覚的に見えないがスクリーンリーダーからは知覚できるようなスタイルが与えられていました。つまり、ライブリージョンの内容はほぼ完全にスクリーンリーダーのためのものということになります。
NVDAを使うスクリーンリーダーのユーザーは、問題なく操作できたと報告していました。ところが自分がmacOSのVoiceOverを使いながら試すと、フィードバックが一切なく非常に操作がしづらいように思えました。そしてまた、Accessibility Visualizerでもやはり、ライブリージョンによるフィードバックのようなものが見られない状態になっていました。しかしNVDAのユーザーはフィードバックがあったというのです。
そこから調べた感じだと、どうやら、VoiceOverが、aria-modal="true" の外のライブリージョンの更新を無視してしまう挙動になっているようです。そしてNVDAはそうではないようです。
私はaria-modal="true" によってその外のライブリージョンの更新は無視されるものと思いこんでいて、Accessibility Visualizerもそういう実装をしていました。5年くらい前にそういう報告を受けて、社内ライブラリを修正したりしたのを覚えています。
あらためて、いろいろとAIに聞いたりしてみると、2022年に「Should <dialog> or element with aria-modal cause live regions outside of the dialogs to be ignored? (#1854)(<dialog>や aria-modalを持つ要素は、ダイアログの外のライブリージョンを無視するべきか?)」というIssueがW3Cのariaリポジトリに立てられていたようです。
その冒頭には、以下のように書かれています。
There is a relatively recent bug in Chromium where if a focus is inside of a dialog or an element with aria-modal, live regions are being ignored.
比較的最近のChromiumのバグで、ダイアログ内または aria-modal をもつ要素にフォーカスがあるとき、ライブリージョンが無視されてしまう
この「Chromiumのバグ」はVoiceOverでのみ発生すると報告されています。添付されているサンプル は、現在手元にあるmacのVoiceOverとSafariの組み合わせでも、CodeSandboxのプレビューパネルでは報告通りの挙動をします。ところが、プレビューを新しいウィンドウで開くと、モーダルダイアログが開いているあいだ数字の読み上げが止ってしまいます。Chromeでは、CodeSandboxのエディターの画面でも、報告通りの挙動をします。Safariの挙動はCodeSandboxのエディターに使われている <iframe> 要素が影響しているのかもしれませんが、むしろ「 aria-modal="true" の外のライブリージョンを無視する」という挙動はChromeのほうが一貫しているようにすら思えます。
どうやら、この2022年のIssueにおいても、そして2026年現在においても、VoiceOverだけが aria-modal="true" の外のライブリージョンを読み上げない状況にあるようです。ちなみに、iOSのVoiceOverも同じ挙動をするようです。
ところで、<dialog> 要素はというと、こちらは状況が異なります。<dialog> 要素を showModal() でモーダルダイアログとして使用した場合には、<dialog> 要素以外の部分はアクセシビリティツリーから除外されます。そのため、NVDAでもVoiceOverでも、ダイアログの外のライブリージョンは存在しないものとして扱われ、特に読み上げられたりはしません。
モーダルダイアログ以外のものがアクセシビリティツリーから除外されているという状況は、aria-modal の普及以前に使われていたテクニックが思い出されます。ダイアログ以外のあらゆるものを aria-hidden="true" にするというものです。
このあたりの挙動を確認するための項目を、Accessibility Visualizer用のテストページ に用意してあります。Accessibility Visualizerで、どの挙動にあわせたものを提供するべきかは検討中です。
この記事のmacOS VoiceOverの動作確認には macOS Tahoe 26.5.1を、iOS VoiceOverの動作確認にはiOS 26.5を、NVDAの動作確認にはNVDA日本語版2026.1.1jp (2026.1.1.4283) を使用しています。