HTML:object要素内にembed要素が入っている訳

ねこめしにっき:object 要素 の data 属性とかの話

結論から言うとWinIEのせいです。

Macromedia の FLASH 埋め込みサンプルソースですが、外側のOBJECT要素はFLASHの埋め込み指定ではなく、ActiveXオブジェクトの埋め込み指定です。つまり、FLASHを再生できるActiveXオブジェクトを埋め込み(clsid属性)、そのActiveXオプジェクトへの引数としてswfファイル名やらなんやらを渡している(param要素)訳です。内側はNetscape独自要素のembedだけど最近のブラウザなら互換により大抵は解釈できます。よってActiveXオブジェクトを解釈できるWinIEはobject要素によってFLASHを表示し、その他のブラウザ(MacIE含む)はActiveXなんか知らないので内側のembed要素によってFLASHを表示する訳です。

HTML標準の書き方はもちろんdata属性にswfファイルを指定する形式です。これはWinIEでは運がいいと動きますが、運が悪いと動きません。特にcodebase属性の解釈は標準と違うので指定されているとイチコロです。

そこで次の案として、ActiveX指定のobject要素と標準形式のobject要素のネストということになります。しかし、WinIEにはネストされたobject要素を正しく無視せず、外側のobject要素が解釈された場合、内側のobject要素は無視されるはずのところが表示されてしまうことがあります。ただし、object要素以外の要素は正しく無視されます。

以上より、まず外側で特別扱いの要るWinIE用の記述を行い、内側の汎用の記述はWinIEのバグを避けるためobject要素を使わずに記述することになる訳です。

実際にはこのような配慮がある訳ではなくてWinIEとNN4両対応の記述が他のブラウザでも動くのでそのまんまな気はしますが、こういう事情なのでNN4が滅びたとしてもembedやめる訳にはいかないということです。

あと、この記述になるのはプラグインの自動ダウンロード機能ともからむんだけどめんどいのでパス。