LocalConnection: простой пример работает во Flash 10, но не во Flash9.

Следующий код, который довольно прямолинейный из любого примера Adobe, отлично работает во Flash 10, но при запуске во Flash 9 событие отправки соединения onStatus получает «ошибку».

Ожидаемое поведение в этом примере заключается в том, что метод listeningConnection.ready вызывается для SWF1.

Демонстрацию этого можно увидеть на 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'");
    }
}

person Sean Kinsey    schedule 24.04.2011    source источник


Ответы (1)


Причина, по которой возникла эта странная ошибка, заключалась в том, что это были одни и те же ссылки на SWF-файлы двумя объектными тегами. Код будет разветвляться по-разному в зависимости от предоставленных переменных, но из-за того, что для обоих используется один и тот же путь, сработал механизм кэширования Flash9, что привело к ошибке.

Таким образом, простым решением было использовать ?host=true/false за src, чтобы обойти кеширование.

person Sean Kinsey    schedule 25.04.2011