LocalConnection:简单的例子可以在flash10中工作,但不能在Flash9中工作



下面的代码,这是相当直接的任何Adobe的例子在Flash 10上工作得很好,但当在Flash 9中运行时,发送连接onStatus事件收到'错误'。

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

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

罪魁祸首是Flash的缓存机制,因为我们使用的是带有条件分支的单个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'");
    }
}

发生这个奇怪错误的原因是两个对象标记引用的是相同的swf文件。代码将根据所提供的变量进行不同的分支,但由于两者使用相同的路径,Flash9的缓存机制启动并导致此错误。

因此,简单的解决方案是在src后面使用?host=true/false以绕过缓存。

最新更新