2009年6月19日金曜日

embedタグで減点されるけど誰か教えてくれないかな

embedタグは現在推奨されていないタグらしくていつも以下の警告が出されてしまって
7: line 63: <embed> は Mozilla、MSIE または doti 用のタグです。 → 解説 55
減点が7点は大きいのです。
そこで解説 55を読んでみると

<TAG> は XXXX 用のタグです。 *5*
チェックしているHTMLのヴァージョンではサポートされていないが、他のヴァージョンでサポートされているタグです。あまりこの警告が大量に出るようなら、DOCTYPE宣言が適切でない可能性があります。各HTMLがどういうタグをサポートしているのかの一覧もあるので参考にしてください。

なんだか却ってわからなくなるような親切な解説で嬉しくて涙がちょちょ切れてしまうよ。
要は
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0をHTML4.0以前に書き換えろって言ってんだよね、そうするとタグの書き方が微妙に違ってくるんだよね。今のところ完璧にXHTMLに合わせて書いてあるから、その部分が全部エラーでチェックされる可能性があるんだよね。もう今更そんなことはできませんね。

通常以下のようにFlash動画を埋め込むのが普通だと思うのですが

<object classid="clsid: ..." codebase="http:// ..." type="application/x-shockwave-flash" width="200" height="100">
<param name="movie" value="example.swf">
<param name="loop" value="false">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
  ↓この部分がobjectタグに対応していなかった場合にembedが代替する。
<embed src="example.swf" loop="false" quality="high" bgcolor="#ffffff" type="application/x-shockwave-flash" width="200" height="100" pluginspage="http:// ...">

</object>

これってobjectタグにブラウザーが対応していない場合にembedタグで代替えするというものですが、どうも代替えのembedタグの記述部分が気にくわないらしいのです。
では、embedタグの部分を取り払ってしまうとどうなるかというと、なんとIEとSafariでは動作するんですね。ところが自分が標準で使用しているFirefoxではまったく動作しないのです。なんでFirefoxでは動作しないんでしょうかね。だってW3Cの勧告によってobjectタグを推奨しているわけでしょう。いつもこの部分で挫折してしまうんだよな。
この部分が解決されない限り絶対にHTMLの構文は満点にならないのです。

誰かこの部分だけでいいから教えてくれないかな。もうお手上げなんだから。
もう一度問題を簡単にまとめるとembedタグを使わずにFireFoxで正常に表示させる方法ですね。

検索したらありましたね。でも完全には解決できていない
FlashをXHTMLで表示させるには(embedタグを使わずに表示させるには)

最近はstrict XHTMLを使ってWebページを製作することが多くなったのですが、そういった場合Flashをどうやって表示させるかは悩みどころ。というのは、 embedタグはXHTMLには定義されていないからです。embedタグを使わないとFirefoxやNetscape系でFlashを表示させることができないと思われがちですが、そうでもないようです。

SG::Acme : Flashをstrict XHTMLで。では、XHTMLで定義されているobjectタグだけを使ってFlashを表示させる方法を紹介しています。objectタグにどの属性をつけてどの属性を取り除くのかがポイントのようですね。

この件に関する詳しい議論はリンク先を読んでいただくとして、どのブラウザでもobjectタグのみで表示するのに最低限必要なコードは以下の通り。





codebase属性などを取り除く必要があるようなので、Win IEでのFlash Playerの自動インストールや自動バージョンアップなどができなくなってしまいますが、Flash Playerのインストール率は90%を超えていると思ったので(Windows XPにはバンドルされてますよね)、なくても構わないような気もします。どうしても必要ならJavaScriptでブラウザ別のobjectタグを動的に書き出せば済みますからね。追記2006年12月30日:自動バージョンアップが全くできないわけではなくExpress Installという方法を使えば自動バージョンアップが可能です。

JavaScriptでこのようなXHTML 1.0 ValidなFlashを表示するためのライブラリを公開しました。上記のIEの自動インストールができない問題などにも対処してます。

気になるのは、レガシーブラウザ(IE4とかNetscape4とか)でどうなるかというところ。とりあえず上記の方法では、IE4では表示されましたが、Netscape4では表示されませんでした。ただ、これらのブラウザではCSSをうまく解釈してくれないので、CSSを適用させないようにすることが多いのですが、Flashに関しても同じような考え方で代替のJPEGみたいなものを表示させると言うことにしておけば良いのかもしれません。

そうかXHTMLそのものがembedタグを実装してないんだよね。そういうことか。すまんすまん俺が悪かった。ってもう少し研究しないと完全解決には至らないな。でもなんとなく明るい日が見えてきたような気がするぞ。

0 件のコメント: