Как загрузить SWF-файл из byteArray? - PullRequest
2 голосов
/ 26 октября 2011

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

private var file_byte:ByteArray;
private var myFileStream:FileStream;
private static var inputFile:File;
private var loader:Loader;

private function loadSWF(url:String):void
{
    inputFile = new File(url);
    myFileStream = new FileStream();
    myFileStream.addEventListener(Event.COMPLETE, completed);
    myFileStream.openAsync(inputFile, FileMode.READ);
    file_byte = new ByteArray();
}

private function completed(event:Event):void 
{
    myFileStream.readBytes(file_byte, 0, myFileStream.bytesAvailable);

    //Decrypting file 
    file_byte = decrypt(file_byte);

    // Prepare the loader context to avoid security error
    var loaderContext:LoaderContext = new LoaderContext();
    loaderContext.allowLoadBytesCodeExecution = true;
    loaderContext.allowCodeImport = true;

    // Load the SWF file    
    loader = new Loader();  
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onChildComplete); 
    loader.loadBytes(file_byte,loaderContext);
}

private function onChildComplete(e : Event) : void
{
    this.addChild(loader);
}

Ошибка безопасности:

Error #3207: Application-sandbox content cannot access this feature.
at flash.system::Security$/allowDomain()
at rfx::MainTimeline_cbc00d6d7b3a063d505c336e0c8f32a1()[constructor.as:0]

byteArray правильно, я записал его в файл на диске, и он хорошо работал во Flash Player. Я много читал о песочнице, allowLoadBytesCodeExecution, внешних SWF-файлах в AIR, но не могу решить эту проблему!

Как загрузить SWF-файл из byteArray?

1 Ответ

2 голосов
/ 22 июня 2012

Возможно, я немного опоздал, но наткнулся на это, когда искал собственную проблему. Попробуйте вместо этого заменить ваш вызов конструктора.

var loaderContext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
...