よろづ書込処v4 - 記事 No.44

記事 No.44 を表示しています。

記事の(右)上部にある「スレッド表示」のリンクからスレッド全体を表示させることができます。また、「返信」のリンクからこの記事に返信することが、「修正」「削除」のリンクからこの記事を修正、削除(要パスワード)することができます。


No.44: 本日のドツボ

スレッド表示//返信//修正/削除

html4.0以降には object という要素があります。
これは画像でもムービーでもオーディオでもアプレットでも、
およそリソースがURIで示されるものであるならば何でも、
html文書中に組み込む事が出来ます。

その object ですが、もちろん html 文書そのものを組み込む事も出来ます。
組み込まれた文書は元の文書とは完全に独立であり、
例えば、組み込まれた html 文書に含まれるリンクをたどった時、
そのリンク先もまた object 要素の作る枠内に組み込まれて表示されるでしょう。

さてここで問題。組み込まれた文書に含まれるリンクをたどった時に
そのリンク先を object 要素の作る枠の外に表示したい場合は、
どのようにすればいいでしょうか?

iframe 要素の場合は簡単です。
iframe 要素は(通常の)フレームと同様に目標フレームとなる事が出来、
リンクに target 属性を与える事によってどの枠に表示させるか制御することが出来ます。

では object 要素の場合は?
object 要素は目標フレームとはなりません。name 属性はありますが
それは form 要素中でフォームコントロールとなる場合に使われるものです。
しかし、Mozilla や Opera では target 属性の予約名(_top とか _blank とか)によって
制御できるようです。

‥‥と、賢明なる読者諸兄姉は既にお気づきの事と思いますが(苦笑)、
例によって IE6 の挙動がよろしくありません。
組み込まれた文書中のリンクのターゲットとして、
_blank を指定した時に新たなウィンドウが開くのはいいのですが、
_parent や _top を指定した場合に object 要素の枠内に表示されてしまいます。
つまり _self と等価。
もっとも、この挙動は HTML 4.01/6.16 Frame target names に定める動作、
This value is equivalent to _self if the current frame has no parent.
に従っているような気もします(確かに「親」は無い。というかフレームが無い)。
でもそれなら _self の動作が「object 要素の作る枠内に表示」というのも
おかしいことになるような気もします。
というのも、IE5 では _self, _parent, _top とも
(object 要素の作る枠内ではなく)現在のウィンドウ全体に開くからです。

object 要素が作る枠がフレーム枠ではないとするなら IE5 の実装が正しいのでしょう。
フレーム枠だとするなら Mozilla や Opera の実装が正しいのでしょう。
IE6 の実装はどういう解釈なのでしょうか。
まぁ仕様書には書かれていない部分なのですが(‥‥多分)。

いやー困った。

なお、最も簡単な解決策「iframe 要素を使う」は、
xhtml 1.1 には iframe 要素が無いという事で却下と致します。



もりば <pdy@moriba.jp>
Script: YY_BOARD/4.8 Poison_des_Yeux/1.35.4
Script-Updated: Mon, 05 May 2008 23:26:52 JST