3

我对 AIR 中的 Worker 有疑问:当我尝试在非原始 Worker 中打开文件时,出现安全错误。当我在原始 Worker 中尝试相同的代码时,它运行良好。我在创建第二个 Worker 时加载了另一个 swf 并传递了它的字节。

首先,我尝试使用 URLLoader(第二个工作人员中的代码):

// 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.

然后我尝试使用 File :

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');

所以它适用于原始 Worker(主应用程序),但不适用于线程...... Worker 不能访问系统的文件或加载任何文件吗?这是一个相当大的限制......

感谢您的回复!

4

1 回答 1

4

公共函数 createWorker(swf:ByteArray, giveAppPrivileges:Boolean = false):Worker

giveAppPrivileges:Boolean (default = false) — 指示是否应向工作人员授予 AIR 中的应用程序沙箱权限。Flash Player 中忽略此参数

于 2012-12-28T09:00:28.433 回答