object hack

object hack (HTML)

[405] object hack は、 HTML における段落ブロック要素の扱いに関する問題の ad hoc かつ controversial な解決方法 (hack) の1つです。

[417] HTML4 のバグを突いた解法でしたが、WinIE での表示の問題からそもそも実用的ではなく、 HTML5 で穴がふさがれたため仕様上も使えなくなりました。

問題の概要

[406] 段落はしばしばリストをはじめとした「ブロック的なもの」を含みます。例えば、

そのような例には
(1) 敢えてそうマーク付けしなくてもさほど問題はないが、要素構造が意味的に不自然になるもの
(2) そうマーク付けしなくては意味的あるいは見た目的に意図通りとならないもの
などがあります。

といった文章は1つの「段落」の内部にリストという「ブロック的なもの」が含まれます。

[407] HTML4 では段落を表す p 要素の内側にリストを表す ul 要素をはじめとするブロック水準要素を含めることができないと規定されていました。 しかし、現実には先に挙げた例のように段落内にブロック的なものが含まれることがあるため、 これをどうマーク付けするかが問題とされました。

解法の概要

[408] この問題には p 要素を用いない、ブロック水準要素を用いない、 マーク付け可能な形に文章を変更する、 p 要素の仕様を変更する、などいくつかの解法が提案されてきました。

[409] object hack は、 object 要素の (おそらくはバグである) 仕様を利用して p 要素ブロック水準要素も利用し、 文章を変更せず、かつ HTML4適合する形で前記の問題を解決するものです。

[410] >>406 に示した例は object hack を用いた場合

<p>そのような例には
<object>
<ol>
<li>敢えてそうマーク付けしなくてもさほど問題はないが、要素構造が意味的に不自然になるもの
<li>そうマーク付けしなくては意味的あるいは見た目的に意図通りとならないもの
</ol>
</object>
などがあります。</p>

のようにマーク付けします。

歴史

[411] object hack は歴史的に何度も独立に考案されてきました。

[1] <http://groups.google.com/groups?selm=6244mo%24l56%40sunglow.eds.ecip.nagoya-u.ac.jp>

1997年10月

すみけん氏が考案、 mimasa 氏が反対

[4] Re: It's a paragraph, but it's not? <http://groups.google.com/groups?selm=Pine.LNX.4.30.0101121238460.6054-100000%40lxplus003.cern.ch>

2001年1月

[5] bubble hour - 2001/12 #1 <http://web.archive.org/web/20030212191217/http://www1.odn.ne.jp/bungaku-shitsu/appendix/diary/d0112-1.html>

2001年12月

一連の議論の中で satoshii 氏が発見

[6] 2004-02-11 18:39:43 +00:00 satoshii: >>5 まぁ、なんつーか…お察し下さい。

[9] Re: Validation errors and white blocks. <http://groups.google.com/groups?selm=y94gb.92146%24lh.19451395%40amsnews02.chello.com>

2003年10月

[8] Re: different bullet points for nested lists <http://groups.google.com/groups?selm=pan.2003.11.27.22.36.15.819571%40goddamn.co.uk>

2003年11月

[3] Object? <http://www.xs4all.nl/~vangeijt/test/object-hack.html>

2004年1月付け

[7] XHTML 1.0 strict en lists <http://groups.google.com/groups?selm=c6b354%2415e%241%40reader08.wxs.nl>

2004年4月

[2] [whatwg] <p> elements containing other block-level elements <http://listserver.dreamhost.com/pipermail/whatwg-whatwg.org/2005-April/003470.html>

2005年4月

Ian 氏の一案

[13] >>2404 だけど多分これ: [whatwg] <p> elements containing other block-level elements ( 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2005-April/003470.html>

[10] p要素の中にobject要素を介してブロック要素を含めることに関する議論 - 徒委記 <http://www.akatsukinishisu.net/wiki.cgi?p%CD%D7%C1%C7%A4%CE%C3%E6%A4%CBobject%CD%D7%C1%C7%A4%F2%B2%F0%A4%B7%A4%C6%A5%D6%A5%ED%A5%C3%A5%AF%CD%D7%C1%C7%A4%F2%B4%DE%A4%E1%A4%EB%A4%B3%A4%C8%A4%CB%B4%D8%A4%B9%A4%EB%B5%C4%CF%C0>

2006年1月

[12] P element's content model restrictions (Leif Halvard Silli <lhs@...> 著, 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/10840> (名無しさん 2007-06-04 11:50:37 +00:00)

終結

[418] 元々 object hack は HTML4object 要素内容モデルの定義のバグを突いた hack でしたが、 HTML5 では object 要素透過内容を持つと定義されており、 phrasing content の中ではやはり phrasing content しか認められないこととなり、 object hack は使えなくなりました。

批判と課題

[412] object hack は表面的には問題を解決しましたが、あまり美しい解法ではなく、 “hack” と呼ばれるに留まった上、普及もしませんでした。

WinIE で表示できない

[413] 普及を最も阻害する原因となったのは WinIEobject 要素内容を正しくレンダリングできないことでした。 WinIE では object 要素は事実上 ActiveX control 専用であり、 ActiveX control 以外の object 要素は壊れているかのように扱い、 内容は無視していました。普及率の最も高い (考案当時は9割以上を占めた) WinIE で正しくレンダリングできないのでは、 所詮机上の空論の域を出ませんでした。

object 要素の乱用である

[414] 構文的に HTML4適合するとはいえ、 HTML4 で定義された object 要素意味object hack は逸脱していました。

[415] そもそも HTML4 の定義上行内要素であったはずの object 要素内容としてブロック水準要素が利用可能であること自体がバグであるとも考えられ、 構文的な適合性のためにそれを流用することは相応しくないとも思われました。

[416] (X)HTML5 Tracking ( 版) <http://html5.org/tools/web-apps-tracker?from=2597&to=2598>

[419] IRC logs: freenode / #whatwg / 20101004 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101004>