3

AIRのワーカーに問題があります。非プリミティブワーカーでファイルを開こうとすると、セキュリティエラーが発生します。原始的なワーカーで同じコードを試してみると、うまく機能します。別のswfをロードし、2番目のワーカーを作成するときにそのバイトを渡します。

まず、URLLoader(2番目のワーカーのコード)を試してみました:

// Loading XML test
var loader:URLLoader = new URLLoader(new URLRequest('app:/config/generator/galaxy.xml'));
loader.addEventListener(Event.COMPLETE, function(evt:Event):void
{
    // Trace
    CEThreadDebugger.log(XML(loader.data).toString());
});
loader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void
{
    CEThreadDebugger.log(evt.text, CEThreadDebugger.ERROR);
});
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:SecurityErrorEvent):void
{
    CEThreadDebugger.log(evt.text, CEThreadDebugger.ERROR);
});

このエラーが発生します:

[LOG]ERROR->Error #2048: Security sandbox violation: app:/SombresCieux.swf cannot load data from app:/config/generator/galaxy.xml.

それから私はファイルで試しました:

var file:File = File.applicationDirectory.resolvePath('config/generator/galaxy.xml');
var stream:FileStream = new FileStream();
stream.open(file, FileMode.READ);
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));
stream.close();

そして、私はこのエラーを受け取ります(私のコードは_mainToWorkerメソッドにあります):

[LOG]INFO->Error #0 : SecurityError -> file
SecurityError: file
    at flash.filesystem::File$/initAppResourceDir()
    at flash.filesystem::File$/get appResourceDirectoryPath()
    at flash.filesystem::File$/get applicationDirectory()
    at generator::Generator/_mainToWorker()
    at engine.generic.system.concurrency::CEThreadMain/Evt_mainToWorker()

エラーはこの行だけから発生していることに気づきました:

var file:File = File.applicationDirectory.resolvePath('config/generator/galaxy.xml');

つまり、原始的なワーカー(メインアプリ)では機能しますが、スレッドでは機能しません...ワーカーはシステムのファイルにアクセスしたり、ファイルを読み込んだりできませんか?それは非常に大きな制限です...

返信ありがとうございます!

4

1 に答える 1

4

パブリック関数createWorker(swf:ByteArray、 giveAppPrivileges:Boolean = false):Worker

giveAppPrivileges:Boolean(デフォルト= false)—ワーカーにAIRでアプリケーションサンドボックス特権を付与する必要があるかどうかを示します。このパラメーターはFlashPlayerでは無視されます

于 2012-12-28T09:00:28.433 に答える