swfobject備忘録

swfobject関連の作業を何かしらのキッカケで三ヶ月に一遍くらいするのですが、結構その度に忘れることがあるのでメモ

swfobjectの読み込みはGoogle Hostingを利用する

    • swfobjectを使うときは,Google-hosted content delivery network(CDN)を利用するのが手っ取り早いし、お薦めの手法
    • jQuery Cook Book(洋書, 和訳多分無い)の1.1とかにも載ってるんですけど、最近はjQueryとかPrototypeはGoogle Hostingに任せるのがお薦めの手法で、ライブラリダウンロードしてローカル読み込みは、非推奨とのこと(但し、デバッグ時などにはローカル利用もあり).なんかもう古いやり方だよね的なノリの解説で、ちなみにTwitterとかもjQueryGoogle Hosting経由で利用してます。
    • 推奨理由は以下の通り
      • 安定, 信頼性, 高速, ライブラリ複数バージョンのサポート

となんかいいことづくめな感じ

  • swfobjectの読み込みは以下のように行います
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"></script>		

swfの読み込みが出来ない

  • きちんと設定したはずなのになぜかswfが読み込まれないというお話
  • swfの読み込みはDocumentrootを基準として読み込む必要がある(未確認)?
    • たとえば,http://hahahahaha/swf/test.swfとおいた場合にはswfobject.embedSWF("/swf/test.swf/", ...)と実行する(まあ別に相対パスでも動きますがね。。 なんか昔嵌った記憶があるのでドキュメントルート指定の方がいいかと)
swfobject.embedSWF("/swf/test.swf", "myContent", "700", "400", "9.0.0", "expressInstall.swf", flashvars, params, attributes);

ActionscriptJavascriptの連携がうまく動作しない

  • ActionscriptJavascript連携する際にはExternalInterface.callとかfscommandを使ってActionscriptからJavascript関数を呼び出すという感じのことをやるのですがこれが上手くいかない というお話。
  • まあ単純にパラメータ指定必要なんですね(たぶん)。。
    • swliveconnect:"true"と設定していない場合fscommandとかでJavascriptと通信できないっぽいです。
    • Flashの読み込みは色々とパラメータ結構多くて厄介。。
var flashvars = {};
var params = { swliveconnect:"true" };
var attributes = { id:"myCom", name:"myCom" };		
swfobject.embedSWF("/swf/test.swf", "myContent", "700", "400", "9.0.0", "expressInstall.swf", flashvars, params, attributes);

ちなみに、何かしらswfobjectに関して上手くいかない場合は, 公式wikiのDocument, FAQ,もしくはTest Suite(swfobjectのテストケース)のソースコードを読むと解決することが多い気がします。
特にtest suiteのソース読む事をお薦めします。テストケースにはswfobjectでやるべき内容が網羅されてるので、swfobjectで出来る大抵の内容は載っています(フルスクリーンとかswf同時読み込みとか)。ちなみにテスト用flaファイルも置いてあるのでそれも参考になりますね。

参考資料

  • swf object test suite
    • テストケースのまとめ. swfobjectでやりたいような内容は大抵網羅されているかと