Flash マークアップをめぐる混迷

趣旨

Flash を HTML 文書に組み込む方法について考えてみた。基本的に Flash はブラウザにしてみれば IMG 要素で表現される画像と同じ種類の要素である(インラインレベル置換要素)。しかし、そのマークアップの方法がいまひとつわかりずらいので、解説する。

歴史的経緯

Flash を HTML 文書に組み込むには、2つのタグが使用できる。EMBED と OBJECT である。何で2つもあるのか、不思議に思うかもしれない。そこらへんの事情は次のエントリに詳しい。

.js外部ファイル編 11 FlashのEMBEDとOBJECTタグ

要するに、Flash はもともと EMBED を使って組み込まれていたのだが、そのあと W3C が「EMBED って HTML 4.0 に入ってないんだよ。OBJECT を使えよな、ゴラ!」を横槍を入れてきたので、ブラウザメーカー(MicrosoftMozilla 等) はオロオロし、EMBED と OBJECT の両方を実装したものの、気合が入らず、OBJECT の実装状況は悲惨な状態である、ということらしい。*1

上のエントリを読んでもらえばわかるのだが、EMBED はすべてのブラウザできちんと動くにもかかわらず、HTML 4.0 の公式要素であるはずの OBJECT では、かなりのブラウザが動かない。(少なくとも Firefox 2.0 ではうまく動かなかった) もし Flash を HTML 要素を埋め込むのなら、EMBED を使うのがいまだに一番確実であるようだ。

とはいえ、HTML 仕様のお墨付きの OBJECT タグを無視するのもなんだか世間体が悪い、ということで、Flash を使う多くのサイトは、次のような折衷的なマークアップを行っている。

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
<param NAME="movie" value="foobar.swf">  
<embed src="foobar.swf" />
</object>

EMBED 要素を OBJECT 要素でラップしているのだ。こうすると、ブラウザは次のように動く。

1. OBJECT 要素を評価して、Flash を表示。そのとき、EMBED は無視される。
2. 1. に失敗したら、EMBED を評価して、Flash を表示。

上の例は単純化された例で、実際には、quality, width, height, type, pluginspage, codebase などのプロパティを指定することが多いようだ。詳しくは Abobe の OBJECT タグと EMBED タグのパラメータ を見てみよう。

*1:感情表現は私の推測にすぎない