2007年9月12日

MT4:Flash を張り付けてみる

下にFlashが張ってあるのですが、見る事が出来るでしょうか。





 

 

 

 

 

 

この Flash は、adobe が配布している AC_FL_RunContent() という JavaScript を利用して、最初からアクティブ化された状態で貼り付けてあります。Flash の上でマウスを動かしたりクリックしたりすると、万華鏡が変化します。

Movable Type で記事に Flash を張り付ける方法を色々と実験してみたので、簡単にまとめてみました。

 

 

下の Flash は、object と embed のタグを利用したよくある Flash の表示方法です。





 

 

 

 

 

 

 

 この Flash は、以下の様に、Flash CS3 からパブリッシュされた html の object 部分を切り出して張りつけています。swf へのパス部分は、アップロードした先の URL へ書き換えました。

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="320" height="240" id="kaleidoscope" align="left">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="http://pepcomix.net/pepcomix_mt/2007/09/12/kaleidoscope.swf" /><param name="menu" value="false" /><param name="quality" value="high" /><param name="salign" value="lt" /><param name="bgcolor" value="#ffffff" /> <embed src="http://pepcomix.net/pepcomix_mt/2007/09/12/kaleidoscope.swf" menu="false" quality="high" salign="lt" bgcolor="#ffffff" width="320" height="240" name="kaleidoscope" align="left" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>

 ただ、この方法では、Flash 上にマウスカーソルを持ってくると『このコントロールをアクティブ化して使用するにはクリックしてください。』というメッセージが表示されます。

これでは、キーボードやマウス入力を必要とする様なインタラクティブな Flash の場合、ユーザーに Flash を一度クリックしてもらわないと、操作ができません。

 

この現象の回避策として、JavaScript の document.write() を利用し、html のソースを書きだすという方法が有名です。

表示する Flash ごとに直接書く事もできますが、今後、面倒くさいので、汎用的に利用できるスクリプトを書いてみました。

 

show_swf.js

function show_swf( swf_id, swf_name, swf_path, swf_width, swf_height){
 document.write('<object classid="clsid: ');
 document.write('d27cdb6e-ae6d-11cf-96b8-444553540000" ');
 document.write('codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" ');
 document.write('width="');
 document.write( swf_width);
 document.write('" height="');
 document.write( swf_height);
 document.write('" id="');
 document.write( swf_id);
 document.write('" align=""> ');
 document.write('<param name="allowScriptAccess" value="sameDomain"> ');
 document.write('<param name="movie" value="');
 document.write( swf_path);
 document.write( '>');
 document.write('<param name="menu" value="false"> ');
 document.write('<param name="quality" value="high"> ');
 document.write('<param name="bgcolor" value="#ffffff"> ');
 document.write('<embed src="');
 document.write( swf_path);
 document.write( swf_name);
 document.write('" menu="false" quality="high" ');
 document.write('bgcolor="#ffffff" width="600" height="240" name="');
 document.write( swf_name);
 document.write('" ');
 document.write('align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> ');
 document.write('</embeded></object>');
 
}

このスクリプトをサーバーの任意の場所へ置き、以下の様な html を書く事で、Flash の表示ができます。

私の場合は、スクリプトを MT4 の plugins ディレクトリに置きました。

<script language="javascript" src="http://pepcomix.net/mt/plugins/Show_swf.js"></script>
<script language="javascript">
  <!--
    show_swf( "kaleidoscope", "kaleidoscope.swf", "http://pepcomix.net/pepcomix_mt/2007/09/12/", "320", "240");
  //-->
</script>

 

また、似たような JavaScript は、Adobe からも提供されています。

http://www.adobe.com/jp/devnet/activecontent/articles/devletter.html

AC_FL_RunContent という関数を利用すると、同じようにアクティブ化の問題を回避する事ができます。

上記のサイトからダウンロードできる Zip ファイルの中の Scripts ディレクトリに.js ファイルがあるので、これをサーバーの任意の場所へアップロードします。

そして、 以下の様な html を書きます。

<script language="javascript">AC_FL_RunContent = 0;</script>
<script src="http://pepcomix.net/mt/plugins/AC_RunActiveContent.js" language="javascript"></<script language="javascript">
 if (AC_FL_RunContent == 0) {
  alert("このページでは \"AC_RunActiveContent.js\" が必要です。");
 } else {
  AC_FL_RunContent(
   'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
   'width', '320',
   'height', '240',
   'src', 'kaleidoscope',
   'quality', 'high',
   'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
   'align', 'left',
   'play', 'true',
   'loop', 'true',
   'scale', 'showall',
   'wmode', 'window',
   'devicefont', 'false',
   'id', 'kaleidoscope',
   'bgcolor', '#ffffff',
   'name', 'kaleidoscope',
   'menu', 'false',
   'allowFullScreen', 'false',
   'allowScriptAccess','sameDomain',
   'movie', 'http://pepcomix.net/pepcomix_mt/2007/09/12/kaleidoscope',
   'salign', 'lt'
   ); //end AC code
 }
</script>

実はこのスクリプトも Flash CS3 でパブリッシュされた html の一部を切り出し、スクリプトや swf の URL を修正したものです。

Flash 8 でも、アップデートパッチをある事で、同じような JavaScript が書きだせるのかもしれません。(未確認)

Flash CS3 でパブリッシュされる html には、JavaScript が利用できない環境であった場合でも、ちゃんと表示出来るように <noscript> のタグもかかれています。

ちなみに、このページの最初に貼ってある Flash も CS3 でパブリッシュされた html の URL などを少し修正し、張り付けただけのものです。

 

Movable Type などのブログで swf を表示する場合、 object と embed のタグを利用して記事を書けば、WYSIWIG 上でもちゃんと Flash が表示された状態で編集できるので便利ですが、インタラクティブな Flash を張る場合、ユーザーに Flash を一度クリックしてもらい、アクティブ化する事を促さなければなりません。

逆に、JavaScript を利用した表示方法では、WYSIWIG の編集画面には何も表示されませんが、最初からアクティブな状態で表示されるので、クリックする様に促したりする必要もなく、スマートです。

ブログの記事を書く時は、状況によって使い分けると便利かもしれません。

 

トラックバックURL

このエントリーのトラックバックURL:
http://pepcomix.net/mt/mt-tb.cgi/8

コメントする