フラッシュを埋め込む object 要素について調べる。XHTML Valid で,IE でも Firefox でも表示が可能なように書くことができる。
先の記事 nlog(n): CamStudio のバグ がきっかけで,object 要素について調べてみることにした。object タグの中には embed タグが書かれたものが多いが,embed タグは XHTML では定義されていないのだ。
HTML を XHTML としての機能を持つように書き換えるにはどうすればいいのか。一般的な書き換えのための要点は次の通り (XHTMLの書き方と留意点)。
- 全てのタグ(要素タイプ名,属性名)は小文字で記述する
- 属性の値は必ず引用符で囲む
- 終了タグを省略しない
- 空要素のタグは /> で閉じる
- ファイル内の位置を示すにはid属性を併記する
- & はあらゆるところで & と記述する
- 属性の省略書式は使わない
- スクリプトやスタイルシートは head 要素内ではなく,外部ファイルに記述する
- 言語コードの指定には xml:lang 属性と lang 属性を併記する
nlog(n): CamStudio のバグ の HTML は,項目 1, 2, 4 を使って書き換えることができる。しかし,最大の問題は,embed 要素はブラウザの独自仕様であり,XHTML では定義されていないということである(XHTML規格に準じて、フラッシュコンテンツを埋め込むには)。embed 要素は,object 要素でフラッシュが表示できなかった場合の代替として働く。つまり,object 要素がきちんと記述されていれば,embed は必要ないのだ。この embed の位置には object が機能しないブラウザのための代替要素を書くことができる。というよりも,embed 自体が代替要素である訳だ。object はインライン要素なので,<p>〜</p> で囲む必要がある。
XHTML Valid にするためには,単に embed タグを削除するだけでよいのだが,そうすると Firefox 2.0 などの Mozilla 系では表示ができなくなってしまう。object タグの中に codebase 属性が書かれているからだ。IE でも Firefox でも表示できるようにするためには,object タグの中に書く属性を次のものだけにする。
id 属性の値は数字から始めてはいけないのだそうだ。XHTML Valid で,IE 6.0 でも Firefox 2.0 でも表示できるようにしたコードは次の通り。Another HTML-lint gateway でも100点である。
object タグ内の data 属性や,<param name="movie" value="〜" /> の値としては,絶対パスや URL が使える。フラッシュのファイルが別ディレクトリや別サイトにある場合は,URL で data="http://nlogn.ath.cx/archives/200702/4balls.swf" などと書いてしまった方がよい。
<param name="movie" value="4balls.swf" /> の行は,IE だけが必要なもので,一般的には不要なものである。逆に,codebase を削除してしまったことで,IE で可能な自動インストールができなくなっている。この問題を,条件付コメントによって解決する方法が How to correctly insert a Flash into XHTML » La Trine で紹介されている。
「コメントの入れ子はダメよ」ということで,HTML-lint では100点でなくなってしまうのだが,XHTML としては Valid で,IE の嬉しい機能も動作するとのこと。
Master Archive Index
Total Entry Count: 1957