1

jQuery document.ready に動的にロードする小さなフラッシュ アプリがあります。IE を除くすべてのブラウザで動作します。インストールされている FlashPlayer のバージョンが 10.1 未満の場合、addCallBack によって追加されたコールバックが存在しません。ターゲット プレーヤーが 9.0.124 である Flex 3.5 の mxmlc を使用してアプリをコンパイルしたので、動作するはずです。私は他のより大きなフレックスアプリを構築しましたが、ExternalInterface と IE で問題はありませんでした。アプリが読み込まれ、ExternalInterface.call メソッドが起動して IE が応答しますが、コールバックはありません。エラーはスローされていません。

MyApp.as

public class MyApp extends Sprite {
    private var sounds:Dictionary = new Dictionary();
    private var channel:SoundChannel = new SoundChannel();
    private var onLoadHandler:String;

    public function MyApp() {
        flash.system.Security.allowDomain("*");

        var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
        onLoadHandler = flashvars.onLoad;

        addEventListener(Event.ENTER_FRAME, registerExternalCallbacks);
     }

    private function registerExternalCallbacks(event:Event):void{
        removeEventListener(Event.ENTER_FRAME, registerExternalCallbacks);

        if (ExternalInterface.available) {
            ExternalInterface.addCallback("addSound", addSound);
            ExternalInterface.addCallback("playSound", playSound);
            ExternalInterface.addCallback("getCameraCount", getCameraCount);

            if (onLoadHandler) {
                ExternalInterface.call(onLoadHandler);
            }
        }
    };

    private function addSound(name:String, url:String):void{
        var sound:Sound = new Sound();
        sound.load(new URLRequest(url));
        sounds[name] = sound;
    }

    private function playSound(name:String):void{
        if (sounds[name] != null) {
             channel = sounds[name].play();
        }
    }

    private function getCameraCount():int {
        return Camera.names.length;
    }
}

HTML マークアップ

<object width="1" height="1" id="MyApp" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" style="position: absolute; top: -999px; left: -999px;">
    <param value="MyApp.swf" name="movie">
    <param value="always" name="allowScriptAccess">
    <param value="false" name="allowFullScreen">
    <param value="false" name="loop">
    <param value="false" name="menu">
    <param value="high" name="quality">
    <param value="onLoad=onLoad" name="flashvars">
    <embed width="1" height="1" flashvars="onLoad=onLoad" quality="high" menu="false" loop="false" allowfullscreen="false" allowscriptaccess="always" name="MyApp" src="MyApp.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" swliveconnect="true" type="application/x-shockwave-flash">
</object>

理想的には、あまり心配する必要はありませんが、上司はこれが古いフラッシュ バージョンでも機能することを望んでいるため、顧客は更新を余儀なくされます。

4

0 に答える 0