2006-03-15 アーカイブ

http://hxxk.jp/2006/03/15/

Transitional DTD じゃダメなのかなあ

記事データ

投稿者

望月真琴

投稿日時

2006-03-15T22:56+09:00

タグ
概要

target 属性を使って、 Transitional DTD を宣言するのが最もスマートな解だと思います。

リプライ

2 件のリプライがあります。

記事本文

そもそも発想の順番が違うような……

はてなブックマーク - 最近の人気エントリー経由で [戯] target="_blank" を使わないで新しいウィンドウでリンクを開く方法hori-uchi.com: _blankを使わないで別ウィンドウを開くにはrel="external"を使うのが美しいと思う。

window.open を使った前者はともかく ( これはこれでバッドノウハウな気がしますけど ) 、後者は HTML ソース中に記述していないだけで、結局は target="_blank" を使っていることと同じなんじゃないのかなあ、と思いました。

コメント欄での 内部的に展開されるDOMツリーはXHTML 1.1 や XHTML Basicに準拠していないんじゃないでしょうか という指摘や、はてなブックマークのコメント rel属性は当該リソースとhrefで示されたURIとの関係なわけで、アプリケーションの挙動を示す為の手段として使うべきではないでしょう という指摘に私は頷きました。

JavaScript を使って解決するよりも、 target 属性を使って、 Transitional DTD を宣言するのが最もスマートな解だと思います。 ( ウィンドウの挙動を target 属性で制御すること自体の是非はここでは置いておいて。 )

何故順番が違うというのか

それぞれの記事中ですごく気になったのが、

<a href="foo.html" target="_blank">foo</a>

を使えば新しいウィンドウでリンクが開きますが,これは XHTML 1.1 や XHTML Basic では採用されていません. ではどうするかというと,スクリプトを使うわけですが,

target="_blank"という書き方がXHTML 1.1 や XHTML Basicに準拠していないので、これらに準拠するようにしつつ、別ウィンドウで開くにはどうすればよいかという話です。

といった記述。 そもそも XHTML 1.1 や XHTML Basic において、ウィンドウをどのように開くかの挙動を指定する target 属性は定義されていないのですから、そのような結果を求めつつ XHTML 1.1 や XHTML Basic を宣言しようとするのが間違いではないでしょうか、と思います。

DTD をどのように宣言するかを考える際に、文書型宣言についてという記事が参考になるのですが、冒頭に

ある文書のマーク附けが完了した時、その文書がHTMLの仕様書(DTD:Document Type Definition:文書型定義)に照らして正当であったとします。 その時、あなたはその文書の先頭に文書型宣言を記述できます。

と書かれてあります。 すなわち、

  1. XHTML 1.1 ( または XHTML Basic ) を宣言する
  2. マークアップしていく途中で、別ウィンドウでリンクを開きたい箇所が出てくる
  3. XHTML 1.1 や XHTML Basic では target 属性は定義されていない、どうしよう
  4. JavaScript でどうにかしよう

というのは順番としては誤りで、

  1. マークアップしていく途中で、別ウィンドウでリンクを開きたい箇所が出てくる
  2. target 属性を使って、別ウィンドウでリンクを開くようにマークアップ
  3. target 属性を使った文書が適合する DTD を考えると、 Transitional DTD のみである
  4. Transitional DTD を宣言する

という考え方をするのが良いと思います。 実際は宣言する DTD を決めてからマークアップをするという順番も充分に考えられます ( 私が Movable Type のテンプレートを書く時もその順番です ) が、考え方としては DTD の宣言は最後に行うとした方が良いと思います。

Firefox で防げるのかなあ

私は自分の意思でそうしたい時以外に別ウィンドウ ( あるいは別タブ ) でリンクを開かれるのを非常に嫌うのですが、これらの window.open によるリンクや、後付けな target="_blank" によるリンクも Destroy target="_blank" with Firefox 1.5 の方法で防げるのかな、とふと思いました。 サンプルを作って試す気が起きないので、誰か検証してください。 ( 他力本願 )

リプライ

2 件のリプライが送られています。 この記事に対するご意見やご質問、ご感想などありましたら個別記事ページの送信フォームからお送り下さい。

2008-01-08T19:57+09:00 - No beer, No Name!

現在のところXHTML 1.1 DTD(http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd)、XHTML Basic 1.0 DTD(http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd)でTarget属性モジュールがINCLUDEされているので、何もせずに使えますね。

2008-01-10T23:45+09:00 - 望月真琴

そうですね。記事を書いた時点ではまだ Second Edition ではなかったのですが、現在は include されています。(元々 target は忘れられていた、的な存在だったようですが)

補足情報

著作、講演、制作実績など