1

この問題は、IE8 と IE7 の両方で発生しています。私はflexでコンパイルされた小さなswfを持っています。基本的には、オーディオ ストリーミング機能の単なるラッパーです。すべてのコントロールなどは、javascript を使用した html です。swfobject の「静的」メソッドを使用して、swf をロードします。これは、Firefox と Chrome でうまく機能します。IE では、swf は正しくロードされますが、オーディオをストリーミングしようとするとすぐにエラーが発生します。

編集:問題を見つけようとするために、コードをかなり減らしました。ここで実行中の新しいバージョンを確認できます。縮小版のエラー、html、および flex ファイルは次のとおりです。

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at isolated/playStream()[/home/defrex/code/bd/trunk/ackbar/media/flex/isolated.mxml:19]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at flash.external::ExternalInterface$/_callIn()
    at <anonymous>()

HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>fuie</title>
        <script type="text/javascript" src="swfobject.js"></script>
        <script>
            var player;
            swfobject.registerObject("_mediaplayer", "9.0.0", undefined, function(e){
                if (e.success)
                    player = e.ref;
                else
                    console.log('Flash not loaded');
            });
        </script>
    </head>
    <body>
        <a href="#" onclick="player.play_fuie('celebration.mp3');return false;">play track</a>
        <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="1" height="1" id="_mediaplayer">
            <param name="movie" value="isolated.swf" />
            <!--[if !IE]>-->
            <object type="application/x-shockwave-flash" data="isolated.swf" width="1" height="1">
            </object>
            <!--<![endif]-->
        </object>
    </body>
</html>

そしてフレックス:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        import flash.external.ExternalInterface;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.net.URLRequest;

        public function init():void {
            ExternalInterface.addCallback("play_fuie", playStream);
            ExternalInterface.call("console.log('flash loaded')");
        }

        public function playStream(stream:String):void {
            var url:URLRequest = new URLRequest(stream);
            var audio:Sound = new Sound();
            audio.load(url);
            var chan:SoundChannel = audio.play();
            chan.soundTransform.volume = 0.5;
        }
    </mx:Script>
</mx:Application>
4

2 に答える 2

1

デバッグの場合は 3 日間イライラした後、話の教訓: ソフトウェアの著作権侵害は悪いことです。VirtualBoxでのIEテストのために開発チームに渡された大ざっぱな「XP Pirate Edition」には、問題を引き起こしている何らかのバグ(またはおそらくマルウェア)があったことが判明しました。同じ VM にインストールされた Chrome でテストを試みたところ、同じエラーが発生しました (Linux の Chromium は問題なく動作していました)。OS に問題がある可能性があることに気付きました。案の定、正規版の IE を入手したところ、すべてが完全に機能しました。

カルマは残酷です。

于 2009-12-14T17:32:05.947 に答える
0

stream が flash に渡される方法をコードで確認するのは難しいです。それが flash パラメーターからのものである場合、ie と firefox は flash オブジェクトにパラメーターを渡すための構文が異なることに注意してください。

http://www.cflex.net/showFileDetails.cfm?ChannelID=1&Object=File&ObjectID=285

于 2009-12-11T14:42:05.220 に答える