尝试在 AIR-app 中加载 swf 并使用 Loader 访问 FTP-server

Trying to load swf and access FTP-server with Loader in AIR-app

我正在创建一个加载其他 swf 文件的应用程序,这些 'windows' 做不同的(有时是复杂的)事情。

我想加载一个 swf 文件,该文件已下载到 documentsDirectory 并使用加载程序加载,效果很好。

如果 swf 想要访问 FTP-服务器,我会收到以下错误

*** Schending van beveiligingssandbox ***
Verbinding met ftp.strato.com:21 gestopt niet toegestaan vanaf file:///Users/alwin/Documents/ServConnect%20Manager/Apps/com-alwinlubbers-upallcars
Fout: Aanvraag voor bron op xmlsocket://ftp.strato.com:21 door aanvrager van file:///Users/alwin/Documents/ServConnect%20Manager/Apps/com-alwinlubbers-upallcars is geweigerd, omdat beleidsbestandsmachtigingen ontbreken.

大致翻译为:

*** Violation of security sandbox ***
     Connection to ftp.strato.com:21 stopped not allowed from file: ///Users/alwin/Documents/ServConnect%20Manager/Apps/com-alwinlubbers-upallcars
     Error: Request for resource at xmlsocket: //ftp.strato.com: 21 by requesting file: ///Users/alwin/Documents/ServConnect%20Manager/Apps/com-alwinlubbers-upallcars because policy file permissions are missing.

它通过套接字连接到服务器。通过 Loader.load(File.url).

的普通加载程序加载 swf

加载器上下文:

var appCont:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
appCont.allowCodeImport = true;

总而言之:父应用程序是桌面 AIR 应用程序,加载的 swf 从服务器下载到用户的文档目录,在文件夹 'ServConnect Manager/Apps/{AppID}' 内。下载后,它会通过加载程序启动,因此在加载时,它是一个本地 swf 文件。加载的 swf 想要连接到 FTP 服务器以获取一些文件,但它不能,因为 'security' 沙箱。

提前致谢。 -阿尔文

我已经通过使用 .loadBytes() 而不是 .load() 加载 swf 来修复它。

首先,我使用加载程序将 swf 加载到 byteArray,如下所示:

    var my_url1:URLRequest = new URLRequest("SWF/Lesson1.swf");
    var urlloader:URLLoader = new URLLoader(my_url1);
    urlloader.dataFormat = URLLoaderDataFormat.BINARY;
    urlloader.addEventListener(Event.COMPLETE, function(event:Event):void
    {
        var myByteArray:ByteArray = URLLoader(event.target).data as ByteArray;
        trace(myByteArray.length);
    });

来源:Load external swf into bytearray with adobe flash

接下来,我使用 .loadBytes(myByteArray, appCont)

在主加载程序中加载了 swf