LocalConnection: простой пример работает во Flash 10, но не во Flash9 - PullRequest
0 голосов
/ 24 апреля 2011

Следующий код, который довольно прост из любого примера 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'");
    }
}

1 Ответ

1 голос
/ 25 апреля 2011

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

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

...