0

次のコードは、Adobeの例からはかなり単純ですが、Flash 10では正常に機能しますが、Flash 9で実行すると、接続の送信onStatusイベントは「エラー」を受け取ります。

この例で予想される動作は、listeningConnection.readyメソッドがSWF1で呼び出されることです。

このデモはhttp://easyxdm.net/beta/tests/flash.html(条件付きロジックを備えた単一のSWF)で見ることができます。

更新 2つの個別のswfファイルではなく、条件付き分岐を備えた単一のフラッシュを使用していたため、原因はFlashのキャッシュメカニズムでした。

制限が解除されたか、Flash 10でこれに関連するバグが修正されたかどうかを知っている人はいますか?

SWF1

public static function main(swfRoot:MovieClip):Void 
{
    var channelName = "_channel";
    var listeningConnection:LocalConnection  = new LocalConnection();

    listeningConnection.ready = function() {
        ExternalInterface.call("console.log", "ready");
    };

    listeningConnection.allowDomain = function(domain) {
        return true;
    };

    if (listeningConnection.connect(channelName)) {
        ExternalInterface.call("console.log","listening on " + receivingChannelName);   
    } else {
        ExternalInterface.call("console.log","could not listen on " + receivingChannelName);    
    }
}

SWF2

public static function main(swfRoot:MovieClip):Void 
{
    var channelName = "_channel";
    var sendingConnection:LocalConnection = new LocalConnection();

    sendingConnection.onStatus = function(infoObject:Object) {
        switch (infoObject.level) {
            case 'status' :
                ExternalInterface.call("console.log", "LocalConnection connected successfully.");
                break;
            case 'error' :
                ExternalInterface.call("console.log", "LocalConnection encountered an error.");
                break;
        }
    };

    if (sendingConnection.send(channelName, "ready")) {
        ExternalInterface.call("console.log", "called 'ready'");
    }else{
        ExternalInterface.call("console.log", "error calling 'ready'");
    }
}
4

1 に答える 1

1

この奇妙なエラーが発生した理由は、2 つの object-tag による同じ SWF ファイルの参照でした。コードは、提供された変数に基づいて異なる方法で分岐しますが、両方に同じパスが使用されているため、Flash9 のキャッシュ メカニズムが作動し、これがエラーを引き起こしました。

したがって、簡単な解決策は?host=true/false、キャッシュを回避するために src の背後で使用することでした。

于 2011-04-25T11:40:52.630 に答える