要件: ページを変更するたびに、スクリーン リーダーはページ コンテンツ全体を読み上げる必要があります。
私たちはfirefox + NVDAを使用してテストを行います.angularは「ページを変更」しないため、状態を変更するときにページ全体を読み取るように次のことを試みました:
aria-live="assertive"
これはほとんどの場合、サイト内のテキストの変更を読み取りますが、追加されたもののみを読み取ります。この場合、テーブルに入力され、ng-repeat
追加された情報を読み取りますが、コンテキストはありません (どの行かはわかりません)。または列が読み取られている)
もう 1 つの問題はフォームでした。angular で入力されると、スクリーン リーダーは angular で入力される前にそれを読み取ります。これは a で解決されました$timeout
がaria-live
、変更を読み取ると一部の部分がスキップさaria-atomic
れます。複数のオプションを持ついくつかの選択があり、それらが読み取られました(それらすべて、100を超えるオプションがあります)。これはスクリーン リーダーの読み方ではなく、最初の 10 個のオプションまたはクリックしたときに表示されるオプションのみを読み上げます。
aria-live または aria-atomic がないと、angular で状態を変更しても、ユーザーには変更が通知されないことに注意してください。
あきらめそうになった後、焦点が間違っている可能性があると判断したため、各状態を独自のページにする必要があったため、次を使用しました。
function ForceNVDARead() {
$(window).on('hashchange', function () {
location.reload();
});
}
これにより、URL が変更されるたびにリロードが強制されます。これはうまく機能し、すべてが正しく読み取られていました。これですべてが解決したとほとんど思っていました。これを除いて、クライアントからサーバーへの二重リクエストが発生します。
ページの再読み込みを強制することなく、通常のページ読み込みのように NVDA に角度のある状態の内容を読み取らせる方法はありますか?
aria-roles のみを使用する、またはこれには機能しないようなものを使用するとは言わないでください。状態を変更するときにアプリケーションがすべてを読み取る必要があります。
アクセシビリティ要件を達成できないため、あきらめて、angularなしでプロジェクトを再開しようとしています。