target属性の利便性

target属性はa要素や、link要素に指定する事ができた、ウィンドウを支配する属性です。 しかしながら、target属性はHTML4 Transitionalで非推奨、HTML4 Strictや、XHTML 1.1では完全に抹消されました。 何故でしょうか? その理由を他の文書も参考にしながら解き明かしてゆこうと思います。

target属性の用例

新しいウィンドウで開くように指定した例
<p><a href="dateki.html" target="_blank">駄的。</a></p>

これは非常に単純なリンクに *target属性* を指定したものです。 リンク集などで多くのサイトに利用されています。 また、target="_top"の指定はフレームを使用した文書の場合は必須となるはずです。 フレームに読み込まれた際に都合の良い様、target="_top"が元から指定されているCGIスクリプトもあるほどです。 それが良いかどうかは別として…。

定義されている仕様

フレームもtarget属性同様、HTML4ではFramesetのみで使用可、XHTML1.1では完全に抹消されました。 そのため、target="_top"が指定できないことにより問題が起こることはありません。

target属性に対する認識

target属性は主に次のような理由で使われているようです。

フレームがあるから

唯一問題のない利用理由でしょう。 寧ろフレームが使われているページではtarget属性が欠けていないかをチェックするべきです。 但し人様のサイトをフレーム内に読み込むと著作権の問題に発展する可能性があります。 注意が必要です。

必ず戻ってくるから

必ず戻ってくる、というのは製作者の想像にすぎません。 リンクを辿って他のサイトへ行く……という事はもうそのサイトには欲しい情報が無いからである可能性は高いと考えられます。 しかしここでは戻ってくると仮定して話を進める事にしましょう。

わざわざ新しいウィンドウを開くという事は 1ページずつ戻るのではだと面倒だと製作者が感じる からだと思われます。 しかし 製作者が閲覧者の理想を知る事は出来ません 。 製作者と全く同じ感覚を閲覧者が持っていると考えるのは誤りです。 例えばOperaは「巻き戻し」という機能を備えており、ドメイン毎に戻って行く事が出来ます。 同様の機能はFirefoxを代表としたGecko系ブラウザにも巻き戻し/早送りボタンの拡張を導入する事でも実現できます。 これらのユーザーの多くは寧ろ新しいウィンドウが開かない方が便利だと感じているでしょう。

Operaユーザーである僕はリンクパネルを固定します。 それで十分なのです。 リンクパネルに関する詳細はOpera チュートリアルを参照して下さい。

何故嫌われるか

主に嫌われる理由はただ1つ。 前述の通りtarget属性は 必ずしも利便性を高める物ではない からです。 前述したように環境による物もありますし、新たなウィンドウが開くたびに「戻れなくなった!!」と驚く人もいます。

WindowsXP SP2の仕様

6-1. ポップアップブロック - Windows XP SP2 のメモ@鳩丸よもやま話によると ポップアップブロックのフィルタレベルを高にするとtarget="_blank"でさえも何も起きなくなる そうです。 これは頭の片隅においておくべきでしょう。

W3Cのtarget属性に関する文書

チェックポイント10.1 : ユーザーエージェントで新しいウインドウを開かない設定ができるようになるまでは、ユーザーに知らせることなしに新しいウインドウを開いたり現在のウインドウを変更しないようにする。 [優先度2]

これはW3C勧告の「Techniques for Web Content Accessibility Guidelines 1.0ZSPCによる邦訳)」の引用です。 これがtarget="_blank"による動作を指し示した文書であることは言うまでもありません。

この勧告では手段を明示していません。 これは新しいウィンドウを開くという 動作 がアクセシビリティに影響を与える事を明言しています。 target属性でそれを実現していようがスクリプトによって実現していようがアクセシビリティを損ねることに変わりないのです。

なお、[優先度2]は文書の冒頭で次のように定義されています。

[優先度2]: ウェブコンテンツ制作者は、このチェックポイントを 満たすべきです 。 そうしないと、その文書の情報にアクセスするのが難しい人達が出てきます。 このチェックポイントを満たすことは、ウェブ文書にアクセスする上での重要な障害を取り除くことになります。

結論

target="_blank"が起こす新たにウインドウを開くという動作は閲覧者側で出来ますが、その逆は一部ブラウザ(Firefox等)を除き不可能です。 逆が不可能である以上、target属性は指定しない方がよいでしょう。

閲覧者はリンク先が今閲覧中のページと共に参照すべきページだと分かっていれば、自分で新たなウインドウを開く筈です。 それでも新しいウィンドウを開く手段を製作者が提供したいなら、閲覧者に選択肢を与えた方がよいでしょう。 その方法としてとりあえず2つ示しておく事にします。

他の手段に頼る

例えばJavaScriptに頼るという手があるでしょう。 現状ではこれが最適だと思います。 但しその際には 必ず閲覧者に選択権を与えねばなりません 。 例えば閲覧者が選択できるようなJavaScriptをHTML文書に加えておくという方法があります。

リンクを2つ並列する

通常のリンクの横に別窓で開く為のリンクも並列すれば一応選択肢は与えられる事になります。

隣に新しいウィンドウで開く為のリンクを併記した例
<p><a href=”*<strong><em>“>どこどこ</a>[<a href=”</em></strong>*” title=“「どこどこ」を別窓で開く” target=”_blank”>別窓</a>]</p>

CSS3を待つ

現在草案段階のCSS3のモジュールとして「ハイパーリンクプレゼンテーションモジュール」があります。 これによって新しいウィンドウで開くという動作は特に意識する事のない手軽な物になる 予定 です。

例えば別のサイトへの(単純な)リンクを全て新しいタブで開きたいと思う閲覧者は、ユーザースタイルシートに以下のように記述すれば良くなるでしょう。

CSS3のtargetプロパティの記述例
<p>a[href^=http:] {
  /* [属性名^=“値”]は前方一致 <em>/
  target-name:new;
  /</em> 常に新しいウィンドウを作成する為の指定 <em>/
  target-new:tab;
  /</em> ターゲットを現在のウィンドウ内のタブで開く為の指定 */
}</p>

これは閲覧者が利用すべき物で、 制作者が利用すべき物ではない 事は言うまでもないでしょうが念のため。

なお、これは まだ利用する事はできません

XHTML 1.1 Second Editionの仕様

2007年2月16日にワーキングドラフト(草案段階)として公開されたXHTML 1.1の第二版(案)ではtarget属性が利用できるように定義が改めかけたことがありました。 が、結局target属性が再定義されるという話は無かったことにされているようです。