LocalConnection:简单示例适用于Flash 10但不适用于Flash9

时间:2011-04-24 16:37:18

标签: flash actionscript actionscript-2 localconnection

以下代码非常适合任何Adobe示例,但在Flash 10中运行时,发送连接onStatus事件会收到“错误”。

此示例中的预期行为是在SWF1上调用listeningConnection.ready方法。

可以在http://easyxdm.net/beta/tests/flash.html(具有条件逻辑的单个SWF)上看到此演示。

更新 罪魁祸首是Flash的缓存机制,因为我们使用带有条件分支的单个闪存而不是两个单独的swf文件。

任何人都知道在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'");
    }
}

1 个答案:

答案 0 :(得分:1)

发生这种奇怪错误的原因是两个object-tags的SWF文件引用相同。代码将根据提供的变量进行不同的分支,但是由于两者都使用了相同的路径,Flash9的缓存机制启动并导致错误。

所以,简单的解决方案是在src后面使用?host=true/false来规避缓存。