6

要件: ページを変更するたびに、スクリーン リーダーはページ コンテンツ全体を読み上げる必要があります。

私たちはfirefox + NVDAを使用してテストを行います.angularは「ページを変更」しないため、状態を変更するときにページ全体を読み取るように次のことを試みました:

aria-live="assertive"

これはほとんどの場合、サイト内のテキストの変更を読み取りますが、追加されたもののみを読み取ります。この場合、テーブルに入力され、ng-repeat追加された情報を読み取りますが、コンテキストはありません (どの行かはわかりません)。または列が読み取られている)

もう 1 つの問題はフォームでした。angular で入力されると、スクリーン リーダーは angular で入力される前にそれを読み取ります。これは a で解決されました$timeoutaria-live、変更を読み取ると一部の部分がスキップさaria-atomicれます。複数のオプションを持ついくつかの選択があり、それらが読み取られました(それらすべて、100を超えるオプションがあります)。これはスクリーン リーダーの読み方ではなく、最初の 10 個のオプションまたはクリックしたときに表示されるオプションのみを読み上げます。

aria-live または aria-atomic がないと、angular で状態を変更しても、ユーザーには変更が通知されないことに注意してください。

あきらめそうになった後、焦点が間違っている可能性があると判断したため、各状態を独自のページにする必要があったため、次を使用しました。

function ForceNVDARead() {
    $(window).on('hashchange', function () {
        location.reload();
    });
}

これにより、URL が変更されるたびにリロードが強制されます。これはうまく機能し、すべてが正しく読み取られていました。これですべてが解決したとほとんど思っていました。これを除いて、クライアントからサーバーへの二重リクエストが発生します。

ページの再読み込みを強制することなく、通常のページ読み込みのように NVDA に角度のある状態の内容を読み取らせる方法はありますか?

aria-roles のみを使用する、またはこれには機能しないようなものを使用するとは言わないでください。状態を変更するときにアプリケーションがすべてを読み取る必要があります。

アクセシビリティ要件を達成できないため、あきらめて、angularなしでプロジェクトを再開しようとしています。

4

1 に答える 1

9

要件: ページを変更するたびに、スクリーン リーダーはページ コンテンツ全体を読み上げる必要があります。

これは基本的に、アクセシビリティの観点からの要件ではありません。これは、画面を見ている人に一度に 1 行ずつすべてを読ませたり、 readquickを使用させたりするのと同じであり、自然な使い方ではありません。

Angular を使用すると、スクリーンリーダーのアクセシビリティを実現できますが、いくつかの仮定をリセットする必要があります。

  • ページの更新がある場合、重要なのはフォーカスを管理し、新しいコンテンツに移動することです。これにより、人々は自分のやり方で読むことができるようになります。
  • ARIA ライブは、コンテンツ全体ではなく、ページの他の場所 (キーボード フォーカスから離れた場所) の小さな更新を目的としています。ここでは答えではありません。完全に削除します。
  • フォームがロードされる前に人々がフォームを読んでいる場合、それは ARIA-live で強制的に読み取ろうとすることの副作用である可能性があります。そうでない場合は、フォーカス管理を使用して、フォームが読み込まれたときにフォーカスをフォームの上部に配置してみてください。
  • NVDA の使用法に関するチュートリアルを読むか、「ネイティブ」ユーザーと話すことはおそらく価値があります。経験から言うと、エンド ユーザーのように使用していないので、「通常の」相互作用がどのようなものかをよりよく理解してください。

ARIA-live の使用を中止してフォーカス管理を行えば、おそらくほとんどの問題は解決するでしょうが、後で別の観点からさらに多くの疑問が生じる可能性があります。

于 2014-11-20T22:40:01.350 に答える