target属性の利便性target属性はa要素や、link要素に指定する事ができた、ウィンドウを支配する属性です。しかしながら、target属性はHTML4 Transitionalで非推奨、HTML4 Strictや、XHTML 1.1では完全に抹消されました。何故でしょうか?その理由を他の文書も参考にしながら解き明かしてゆこうと思います。
target属性の用例<a href="dateki.html" target="_blank">駄的。</a>
これは非常に単純なリンクにtarget属性を指定したものです。リンク集などで多くのサイトに利用されています。また、target="_top"の指定はフレームを使用した文書の場合は必須となるはずです。フレームに読み込まれた際に都合の良い様、target="_top"が元から指定されているCGIスクリプトもあるほどです。それが良いかどうかは別として…。
フレームもtarget属性同様、HTML4ではFramesetのみで使用可、XHTML1.1では完全に抹消されました。そのため、target="_top"が指定できないことにより問題が起こることはありません。
target属性に対する認識target属性は主に次のような理由で使われているようです。
唯一問題のない利用理由でしょう。寧ろフレームが使われているページではtarget属性が欠けていないかをチェックするべきです。但し人様のサイトをフレーム内に読み込むと著作権の問題に発展する可能性があります。注意が必要です。
必ず戻ってくる、というのは製作者の想像にすぎません。リンクを辿って他のサイトへ行く……という事はもうそのサイトには欲しい情報が無いからである可能性は高いと考えられます。しかしここでは戻ってくると仮定して話を進める事にしましょう。
わざわざ新しいウィンドウを開くという事は1ページずつ戻るのではだと面倒だと製作者が感じるからだと思われます。しかし製作者が閲覧者の理想を知る事は出来ません。製作者と全く同じ感覚を閲覧者が持っていると考えるのは誤りです。例えばOperaは「巻き戻し」という機能を備えており、ドメイン毎に戻って行く事が出来ます。同様の機能はFirefoxを代表としたGecko系ブラウザにも巻き戻し/早送りボタンの拡張を導入する事でも実現できます。これらのユーザーの多くは寧ろ新しいウィンドウが開かない方が便利だと感じているでしょう。
Operaユーザーである僕はリンクパネルを固定します。それで十分なのです。リンクパネルに関する詳細はOpera チュートリアルを参照して下さい。
主に嫌われる理由はただ1つ。前述の通りtarget属性は必ずしも利便性を高める物ではないからです。前述したように環境による物もありますし、新たなウィンドウが開くたびに「戻れなくなった!!」と驚く人もいます。
6-1. ポップアップブロック - Windows XP SP2 のメモ@鳩丸よもやま話によるとポップアップブロックのフィルタレベルを高にするとtarget="_blank"でさえも何も起きなくなるそうです。これは頭の片隅においておくべきでしょう。
target属性に関する文書チェックポイント10.1 : ユーザーエージェントで新しいウインドウを開かない設定ができるようになるまでは、ユーザーに知らせることなしに新しいウインドウを開いたり現在のウインドウを変更しないようにする。[優先度2]
これはW3C勧告の"Techniques for Web Content Accessibility Guidelines 1.0"[ZSPCによる邦訳]の引用です。これがtarget="_blank"による動作を指し示した文書であることは言うまでもありません。
この勧告では手段を明示していません。これは新しいウィンドウを開くという動作がアクセシビリティに影響を与える事を明言しています。target属性でそれを実現していようがスクリプトによって実現していようがアクセシビリティを損ねることに変わりないのです。
なお、[優先度2]は文書の冒頭で次のように定義されています。
- [優先度2]
- ウェブコンテンツ制作者は、このチェックポイントを満たすべきです。そうしないと、その文書の情報にアクセスするのが難しい人達が出てきます。このチェックポイントを満たすことは、ウェブ文書にアクセスする上での重要な障害を取り除くことになります。
target="_blank"が起こす新たにウインドウを開くという動作は閲覧者側で出来ますが、その逆は一部ブラウザ(Firefox等)を除き不可能です。逆が不可能である以上、target属性は指定しない方がよいでしょう。
閲覧者はリンク先が今閲覧中のページと共に参照すべきページだと分かっていれば、自分で新たなウインドウを開く筈です。それでも新しいウィンドウを開く手段を製作者が提供したいなら、閲覧者に選択肢を与えた方がよいでしょう。その方法としてとりあえず2つ示しておく事にします。
例えばJavaScriptに頼るという手があるでしょう。現状ではこれが最適だと思います。但しその際には必ず閲覧者に選択権を与えねばなりません。例えば閲覧者が選択できるようなJavaScriptをHTML文書に加えておくという方法があります。
通常のリンクの横に別窓で開く為のリンクも並列すれば一応選択肢は与えられる事になります。
<a href="****">どこどこ</a>[<a href="****" title="「どこどこ」を別窓で開く" target="_blank">別窓</a>]
現在草案段階のCSS3のモジュールとして「ハイパーリンクプレゼンテーションモジュール」があります。これによって新しいウィンドウで開くという動作は特に意識する事のない手軽な物になる予定です。
例えば別のサイトへの(単純な)リンクを全て新しいタブで開きたいと思う閲覧者は、ユーザースタイルシートに以下のように記述すれば良くなるでしょう。
a[href^="http:"] {
/* [属性名^="値"]は前方一致 */
target-name:new;
/* 常に新しいウィンドウを作成する為の指定 */
target-new:tab;
/* ターゲットを現在のウィンドウ内のタブで開く為の指定 */
}
これは閲覧者が利用すべき物で、制作者が利用すべき物ではない事は言うまでもないでしょうが念のため。
なお、これはまだ利用する事はできません。
2007年2月16日にワーキングドラフト(草案段階)として公開されたXHTML 1.1の第二版(案)ではtarget属性が利用できるように定義が改めかけたことがありました。が、結局target属性が再定義されるという話は無かったことにされているようです。