WCAG 2.0 実装方法集

メインコンテンツへスキップ

-

SCR24: プログレッシブ・エンハンスメントを用いて、利用者の要求に応じて新しいウィンドウを開く

適用(対象)

HTML 4.01 及び XHTML 1.0

これは、次の達成基準に関連する実装方法である:

解説

この実装方法の目的は、利用者が要求していない新しいウィンドウの出現によって引き起こされうる混乱を回避することである。突然新しいウィンドウが開くと、利用者は混乱したり、そのことに気づかなかったりする。文書型がtarget属性を認めていない場合(HTML 4.01 Strict や XHTML 1.0 Strict には存在しない)、又はコンテンツ制作者がtarget属性の使用を好まない場合には、ECMAScriptを用いて新しいウィンドウを開くことができる。以下にある事例は、スクリプトを用いて新しいウィンドウを開く方法を示している。その事例では、リンク(a要素)にイベントハンドラを追加して、利用者にリンク先のコンテンツが新しいウィンドウで開くことを事前に知らせている。

事例

事例 1:

マークアップ:

スクリプトはドキュメントのhead要素内に組み込まれており、リンクにはスクリプトのフックとなるid属性がある。

コード例:


<script type="text/javascript" src="popup.js"></script>
…
<a href="help.html" id="newwin">ヘルプを表示</a>
		

スクリプト:

コード例:

 
// ブラウザによるイベント登録のサポートは不十分だが
// 従来のイベントモデルを用いる
window.onload = addHandlers;

function addHandlers()
{
  var objAnchor = document.getElementById('newwin');

  if (objAnchor)
  {
    objAnchor.firstChild.data = objAnchor.firstChild.data + ' (新しいウィンドウで開く)';
    objAnchor.onclick = function(event){return launchWindow(this, event);}
    // UAAG ではユーザーエージェントにデバイス非依存な方法でイベントを処理することを
    // 要求しているが、そうしないブラウザが多いのでキーボードイベントを追加する
    objAnchor.onkeypress = function(event){return launchWindow(this, event);}
  }
}

function launchWindow(objAnchor, objEvent)
{
  var iKeyCode, bSuccess=false;

  // キーボードからのイベントである場合、ユーザーがリンクをリクエストしたときだけ
  // 新しいウィンドウを開くようにする(リターン又はスペース)
  if (objEvent && objEvent.type == 'keypress')
  {
    if (objEvent.keyCode)
      iKeyCode = objEvent.keyCode;
    else if (objEvent.which)
      iKeyCode = objEvent.which;

    // キャリッジ・リターン又はスペースではない場合、ユーザーエージェントが
    // アクションの処理を継続するようにtrueを返す
    if (iKeyCode != 13 && iKeyCode != 32)
      return true;
  }

  bSuccess = window.open(objAnchor.href);

  // ウィンドウが開かなかった場合、ブラウザには同じウィンドウで開くという
  // デフォルトのアクションを継続させる
  if (!bSuccess)
    return true;

  // ウィンドウが開いたら、ブラウザによる処理をそこで止める
  return false;
}
		

参考リソース

この参考リソースは、あくまでも情報提供のみが目的であり、推薦などを意味するものではない。

検証

チェックポイント

  1. ドキュメントにあるリンクを起動して、新しいウィンドウが開くかどうかをチェックする。

  2. 新しいウィンドウを開くリンクが、次の全てをスクリプトを用いて実装されている:

    1. リンクが新しいウィンドウを開くことを明示している

    2. デバイス非依存のイベントハンドラを用いている

    3. 新しいウィンドウを開けない場合には、ブラウザが同じウィンドウにリンク先のコンテンツを開くようにしている

判定基準

注意: この実装方法が「達成基準を満たすことのできる実装方法」の一つである場合、このチェックポイントや判定基準を満たしていなければ、それはこの実装方法が正しく用いられていないことを意味するが、必ずしも達成基準を満たしていないことにはならない。場合によっては、別の実装方法によってその達成基準が満たされていることもありうる。

日本語訳における注記:

この文書の正式版は、W3Cサイトで公開されている英語の文書であり、この日本語訳には誤訳が含まれていることもありえます。なお、文中にある「日本語訳における注記」は、W3Cの原文にはないものであり、日本語訳監修者が追記したものです。