適用 (対象)
HTML 及び XHTML で使用されるクライアントサイドスクリプト
これは、次の達成基準に関する達成方法である:
- 達成基準 2.4.4: リンクの目的 (コンテキスト内) (書かれていない達成方法を満たす手段として十分)
- 達成基準 2.4.9: リンクの目的 (リンクのみ) (書かれていない達成方法を満たす手段として十分)
解説
この達成方法の目的は、リンクがコンテキスト外でも理解可能になるように、追加情報をリンクテキストに加えることを利用者が選択できるようにすることである。
一部の利用者は、リンクのコンテキストを探索する必要がないように、リンクがすべてを含んでいることを好む。別の利用者は、それぞれのリンクにコンテキストに関する情報が含まれていると、反復されてサイトの使い勝手が低下すると感じている。支援技術の利用者の間では、どちらが好ましいかに関して、ワーキンググループへのフィードバックは分かれている。この達成方法は、利用者自身にとって良い方法を選ぶことを可能にする。
ページの先頭近くに、そのページ上のリンクのテキストを展開するリンクが提供され、あらゆるリンクの目的を理解するための追加的なコンテキストが必要とならないようになっている。展開されるリンクの目的は、そのリンクテキストから、常に直接理解可能でなければならない。
この達成方法では、現在表示されているページのリンクだけを展開する。利用者がそのサイトに対して 1 度だけ設定を行えば良いようにするために、設定情報を Cookie 又はサーバーサイドのユーザプロファイルに保存することも可能であり、場合によってはそれが望ましい。
事例
例 1
この例では、JavaScript を用いて直接リンクのテキストにコンテキスト情報を追加する。link クラスはどのテキストを追加するかを決定する。「リンクを展開する」リンクが選択されたとき、ページ内のそれぞれのリンクにテキストを追加すべきかがテストされる。
...
<script type="text/javascript">
var expanded = false;
var linkContext = {
"hist":" version of The History of the Web",
"cook":" version of Cooking for Nerds"
};
function doExpand() {
var links = document.links;
for (var i=0; i<links.length; i++) {
var link = links[i];
var cn = link.className;
if (linkContext[cn]) {
span = link.appendChild(document.createElement("span"));
span.setAttribute("class", "linkexpansion");
span.appendChild(document.createTextNode(linkContext[cn]));
}
}
objUpdate = document.getElementById('expand');
if (objUpdate)
{
objUpdate.childNodes[0].nodeValue = "Collapse links";
}
expanded = true;
}
function doCollapse() {
objUpdate = document.getElementById('expand');
var spans = document.getElementsByTagName("span");
var span;
// go backwards through the set as removing from the front changes indices
// and messes up the process
for (i = spans.length - 1; i >= 0; i--) {
span = spans[i];
if (span.getAttribute("class") == "linkexpansion")
span.parentNode.removeChild(span);
}
if (objUpdate)
{
objUpdate.childNodes[0].nodeValue = "Expand links";
}
expanded = false;
}
function toggle() {
if (expanded) doCollapse();
else doExpand();
}
</script>
...
<h1>Books for download</h1>
<p><button id="expand" onclick="toggle();">Expand Links</button></p>
<ul>
<li>The History of the Web: <a href="history.docx" class="hist">Word</a>, <a href="history.pdf" class="hist">PDF</a>, <a href="history.html" class="hist">HTML</a> </li>
<li>Cooking for Nerds: <a href="history.docx" class="cook">Word</a>, <a href="history.pdf" class="cook">PDF</a>, <a href="history.html" class="cook">HTML</a> </li>
</ul>
...
このコードの動作例: 要求に応じてリンクを展開する。
検証
手順
- ページの先頭近くに、リンクを展開するリンクがあることを確認する
- 手順 1. で特定したリンクがリンクテキストだけで特定できることを確認する
- リンクテキストだけで特定できないリンクをページ中から探す
- 手順 1. で特定したコントロールを有効にする
- 手順 3. で特定したリンクの目的が、リンクテキストだけで特定できることを確認する
期待される結果
- #1、#2 及び #5 の結果が真である。