Flash Playerのバージョン検出やSWFのHTMLページへの埋め込みには、これまでに様々な方法が使用されてきました。この節ではよく使用される方法をいくつか取り上げ、それぞれの欠点を説明します。
誰でも知っている方法がデフォルトのFlash埋め込み方法です。これはobjectタグと、代替メカニズムとしてその内側に挿入するembedタグで構成されます。これが最もよく使用されるFlash埋め込み方法であり、Flash IDEからSWFをパブリッシュするときのデフォルトになっています。また、SWFを埋め込む最も互換性の高い方法でもあり、様々なブラウザで機能します。
以下にデフォルトのFlashのembedコードサンプルを示します。
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="550" height="400" id="Untitled-1" align="middle"> <param name="allowScriptAccess" value="sameDomain" /> <param name="movie" value="mymovie.swf" /> <param name="quality" value="high" /> <param name="bgcolor" value="#ffffff" /> <embed src="mymovie.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="mymovie" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> </object>
これが最もよく使用されるムービーの埋め込み方法ですが、欠点がいくつかあります。
embedタグのようなものはありません。しかも、ブラウザによってobjectタグの扱いが異なり、まったく無視されたり、実装に問題があったりするので、代替メカニズムとしてembedタグが必要です。
図1. Internet Explorerで表示されるActiveXインストールメッセージ
図2. Firefoxで表示されるプラグインインストールメッセージ
Objectタグのみを使用する方法とFlash Satayという方法は、Drew McLellanの記事「Flash Satay: Embedding Flash While Supporting Standards*」が2002年にA List Apartに掲載されて以来、支持されています。
以下にObjectタグのみを使用する埋め込みとFlash Satayのコードサンプルを示します。
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="300" height="120"> <param name="movie" value="http://www.macromedia.com/shockwave/download/triggerpages_mmcom/flash.swf"> <param name="quality" value="high"> <param name="bgcolor" value="#FFFFFF"> <!--[if !IE]> <object data="http://www.macromedia.com/shockwave/download/triggerpages_mmcom/flash.swf" width="300" height="120" type="application/x-shockwave-flash"> <param name="quality" value="high"> <param name="bgcolor" value="#FFFFFF"> <param name="pluginurl" value="http://www.macromedia.com/go/getflashplayer"> FAIL (the browser should render some flash content, not this). </object> <![endif]--> </object>
<object type="application/x-shockwave-flash data="c.swf?path=movie.swf" width="400" height="300"> <param name="movie" value="c.swf?path=movie.swf" /> <img src="noflash.gif" width="200" height="100" alt="" /> </object>
これらの方法にも次のような欠点があります。
embedタグと同様に、プラグインの検出が行われないと、不完全なコンテンツが表示される場合やまったく表示されない場合があります。Flash PlayerはSWFがページに埋め込まれていると、バージョンに関係なく再生しようとします。したがって、Flash Player 6がインストールされていてFlash 7のSWFを検出した場合、プラグインは再生を試みますが、予期しない動作を生じる場合があります。paramタグを無視する:2.0(Mac OS X "Tiger")または1.3(OS X "Panther")以前のバージョンでは、Safariブラウザはparamタグを完全に無視していました。つまり、Flashvars、Align、Salignなどを使用して他のオプションを設定しようとしても、Safariではそれらの値が検出されませんでした。この方法では、WebサイトのインデックスページにSWFを1つ配置し、それによってFlash Playerの$version変数のチェックを行い、ユーザをサイト内のFlashコンテンツまたは「Flashの更新」ページのどちらかへリダイレクトします。
この方法にも問題があります。
embedタグは、HTMLドキュメントでは有効ではありません。Macromedia(現Adobe)がFlash Player 8とともにリリースしたFlash Player検知キットは非常によくできていますが、それでも欠点があります。Flash Playerを検出する方法は2つ用意されています。
Flash Player検知キットの詳細については、私のブログ*を参照してください。
この方法はサイトによって異なるので評価が困難ですが、私が検討した範囲では、JavaScript Flash検出スキームのほとんどは、同じ欠点を持っています。
ご覧いただいたように、SWFObjectの特長はサイズが小さく、使いやすく、アクセスが限定されないことです。ページの検証も行うことができます。そのため、Express Installも非常に簡単に使用できます。
SWFObjectについてさらに詳しくは、SWFObjectの公式ページ*をご覧ください。また、スクリプトの更新については、私のブログ*をご覧ください。スクリプトの使用に関する質問や、新しい機能のリクエスト、ご意見などをお持ちの方は、SWFObjectメーリングリスト*にご参加ください。