本文へ移動
easeweb
ご相談
トピックを検索

読んでいる最中に自動更新で書き換わってしまう新着一覧

ニュースサイトの新着一覧は60秒ごとに内容を取得し直して丸ごと書き換えるうえ、止める手段もないため、読んでいた記事がフォーカスごと消えてしまう

WCAG 2.2
SC 3.2.5AAA
必須とする規格
Section 508、EN 301 549、JIS X 8341-3 では必須ではない
問題あり list.innerHTML = await response.text();
アクセシビリティの問題を示した図: 全盲:読んでいた記事はどこ?
01

問題

スクリーンリーダー、キーボード、画面拡大ソフトで一覧を読む人は、1分ごとに読んでいた記事を見失い、しかも更新を止める手段がない

02

試してみる

一覧の3件目の記事までTabキーで移り、次の更新が来るのを待ってみましょう

一覧は実際の時間で60秒ごとに更新されます。待たずに試すには、デモ用の時計の「次の更新まで進める」を押してください。フォーカスがどこへ行き、読んでいた記事がどこへ移るかを見たら、それぞれの修正を適用してもう一度試してください。

問題あり 修正できますか?

問題1分ごとに丸ごと上書きされる一覧
デモ用の時計:サイトが新着を確かめるまで 1:00

フォーカス:ページの外

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

一覧は、利用者が求めたときだけ変える

修正前
問題1分ごとに丸ごと上書きされる一覧
<section aria-labelledby="latest-title">  <h2 id="latest-title">Latest</h2>  <ol id="stories">    <li>      <time datetime="10:40">10:40</time>      <a href="/news/storm-warning">Storm warning for the coast tonight</a>    </li>    …  </ol></section>
問題点4点
  • 誰かが読んでいるかどうかに関係なく、60秒ごとに一覧全体が置き換わります。
  • フォーカスのある記事のリンクも一緒に取り除かれ、フォーカスはページに戻ります。
  • 新しい記事が来ると、その下の記事はすべて1つ下にずれます。
  • 更新を止める手段がありません。
修正後

新しい記事を表示するボタン

<section aria-labelledby="latest-title">  <h2 id="latest-title">Latest</h2>  <button type="button" id="show-new" hidden>Show 1 new story</button>  <ol id="stories">    <li>      <time datetime="10:40">10:40</time>      <a href="/news/storm-warning">Storm warning for the coast tonight</a>    </li>    …  </ol></section>
修正の手順4ステップ
  1. 60秒ごとの取得は続けますが、ページの先頭の記事より新しいものだけを求め、一覧には書き込まずに取っておきます。
  2. その件数を一覧の前のボタンに書き、ボタンを表示します。一覧は変わらないので、誰も読んでいる位置を失いません。
  3. ボタンが押されたら、新しい記事を一覧の先頭に加えます。これが、利用者の求めた変化です。
  4. 押したボタンはまた隠れるため、フォーカスを最初の新しい記事へ移します。利用者は、自分で表示させた記事から読み始められます。

これで修正前の例は直り、3.2.5を満たします。主要な内容は、誰かがボタンを押したときにだけ変わります。一覧が勝手に変わることはもうないので、2.2.2も満たします。

04

デザインの案

新着一覧は、最新を追いながらも、求められるまで待てる

新しい記事が届いたことを伝える方法をさらに3通りと、一覧を勝手に変えてしまう流行りの形を2通り示します。それぞれの記事にTabキーで移動して数秒待ち、サンプルにあるものを押してみてください。

デザインファイルで

  • 一覧を2通り描く:新着が届いた状態(変わるのは一覧の上のコントロールだけ)と、押した後の状態(新しい記事が先頭に並ぶ)。
  • ボタンやスイッチは一覧の上に置き、ページを読んだりTabキーで移動したりしたときに、記事より先に来るようにする。
  • ボタンには「新着2件」のように件数を言葉で書き、点や数字だけにしない。
  • ボタンを押した後にフォーカスが移る先として、最初の新しい記事に印を付ける。
  • 自動更新を用意するなら、ページを開いたときのスイッチはオフで描く。

合格

不合格

  • 先頭に滑り込んでくる記事WCAG 3.2.5 記事にTabキーで移動して待つと、その上に新しい記事が滑り込み、元の記事を押し下げます。生き生きと見えますが、読んでいた記事が頼んでもいないのに動き、画面拡大鏡では視界から外れます。サンプルでは1回だけですが、このパターンは1分ごとに繰り返します。
  • 自動更新までのカウントダウンの輪WCAG 3.2.5 細い輪が「5秒後に更新」とカウントダウンし、一覧全体が描き直されて、フォーカスのあった記事は消えます。輪は変化が来ることを知らせますが、止める手段はありません。サンプルのカウントダウンは1回だけですが、このパターンは更新のたびに始まり直します。
05

修正の確認

5項目、マウス不要

確認方法: キーボード、スクリーンリーダー、拡大表示

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。一覧のコンポーネントや更新のスクリプトを変更した際は、再度確認します。

制限

これは出発点となる実装例であり、すべてのアプリケーションでの適合を保証するものではありません。このガイドが扱うのは、タイマーで丸ごと書き換わる一覧です。ページを開いたときや文字を入力したときに開くウィンドウなど、3.2.5が利用者の操作で起こすよう求めるほかの変化も、失敗の形は同じで、直し方も同じです。利用者が求めたときに起こすことです。フォーカスや値の変更でページを変える欄やセレクトは操作するだけでページが変わるドロップダウンと入力欄で、新しいタブで開くリンクは新しいタブで開くことを伝えないリンクで扱います。読んでいた要素が取り除かれたときの動きはスクリーンリーダーによって違うため、利用者が使っているもので確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る