ホーム >> 左脳Script >> Adobe Flash >> Action Script >> ExternalInterface 使用上の注意

ExternalInterface 使用上の注意


フラッシュと Java Script の連携について。
メモというか、躓いたと言うか、そんな事。


ExternalInterface

フラッシュ側で、Java Script とのアクセスを可能にするインターフェースのクラスがあります。
これの使い方自体は非常に簡単で、判りやすく、それが問題になるケースは殆ど無いでしょう。

実際の連携において問題となるのは、「関数呼び出しのタイミング」ですね。

Java Script の DOM のように、コードが実行出来る段階で、対象のフラッシュが初期化されていなかったり、そもそも読み込まれていなかったりする(環境による場合)事があります。

厄介なのは、フラッシュが読み込まれたけれど、初期化(ExternalInterface による関数の公開など)が済んでいない為に、Java Script からのアクセスでエラーが出るような場合。


ナントカして、Java Script がフラッシュの初期化完了を知る必要があるのですが、結果から言うと「フラッシュ側から Java Script へ初期化完了の通知をする仕組み」を自力で実装しなければならないようです。


設計段階で想定するべきエレガントな方法

想定できるエレガントな方法としては、
  • フラッシュ読み込み時に「初期化完了コールバック関数名」をパラメータなどで渡し、実際にフラッシュ側の初期化が済んだ段階でコールバックする。
と、言った所でしょうか。これには異論は少ないと思います。


公開段階の不具合?!修正で慌てない方法

しかし、既に公開しちゃって(ぉ)フラッシュの修正が面倒容易でない場合はどうしたらよいでしょうか?

モノがWeb上にあるという性質上、こんな状況になってしまうのもどうかと思いますが、十分に考えられる「あって欲しくないけど、ありえなくない事態」は、稀に良くある訳で。

フラッシュの場合は、修正作業に手間(コンパイルとか、パブリッシュとか)が挟まるので、どうしてもフットワークが重くなる場合が在ります。それを、Java Script で回避できれば、HTML の修正、Java Script の修正だけで済みますから、チョッとは腰も軽くなる(あくまで比較的に)事でしょう。


Java Script で「不具合を華麗に回避」するには、どうしたらよいか?と言う問いには、各自の工夫でイロイロと回答があると思います。

私の場合(むしろ、この記事の場合)は、以下のようにして「関数呼び出しの成功or失敗を戻り値にする」という形にしました。

function    action_script_call(param)
{
    var swf =   document.all? window[ 参照先 ] : document[ 参照先 ];
    if( swf )
    {
        try
        {
            swf.呼び出したい関数(param);
            return  true;
        }
        catch(e)
        {
        }
    }
    return  false;
}
本来は、失敗しないようにコーディングするべきですが、そんな追及している暇はにぃ!ような場合、「失敗をトラップし、その場合の動作を別に記述する」事が出来れば、対処は早いと思います。


回避ではなく先回り

「エラーが出る」というのは、最も簡単にクレームを付けられやすい(つけ易い)物です。
怪しい箇所は前もって先回りしてトラップしておけば、後々のクレームも減らせると言うもの。

しかし、根拠のないエラートラップは、コードの可読性の低下、そこからくるメンテ手間など、問題を孕んでいます。また、中途半端に先回りすると、不具合の発見が遅れ、被害が拡大しかねない諸刃の剣。



オチ?てないよ

結局は、設計やらコーディングの段階で前もって知っておかなければならない知識の量、経験の量が物を言う・・・と。
やっぱり、そーなるのか。

至極当然、世の摂理。

経験を積むしかなさそうですね・・・orz




トラックバック(0)

トラックバックURL: http://n-yagi.0r2.net/sanoupulurun/mt-tb.cgi/214

コメントする

ホーム >> 左脳Script >> Adobe Flash >> Action Script >> ExternalInterface 使用上の注意

アーカイブ

このブログ記事について

このページは、n-yagiが2009年7月 8日 23:05に書いたブログ記事です。

ひとつ前のブログ記事は「mtEval ~EvalTemplate の終焉~」です。

次のブログ記事は「Google Chrome で ブックマークレットを使う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。