Adobe Air在内部使用allowDomain(' *')加载外部swf

时间:2015-12-08 07:45:47

标签: actionscript-3 flash air

我有什么

没有它的swfs的大量swfs(因此我无法修改它)

我需要什么

使用我的AIR应用程序加载和播放此swfs。

问题

问题是这个swfs似乎有

Security.allowDomain('*')

在他们的来源中,所以他们会抛出

  

SecurityError:错误#3207:Application-sandbox内容无法访问   这个功能。

我加载后。我知道Air并不需要使用这一行,但是不是忽略或警告它,我的完整应用程序将在加载其中一个swfs后停止执行。如果我只能尝试/捕获这个字符串,但正如我所说,我没有swfs的来源,所以我唯一能做的就是修改我的AIR应用程序。

我尝试了什么

我已经尝试过通过捐赠

来捕获装载机内的所有错误
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOErrorHandler);

private function loaderIOErrorHandler(e:IOErrorEvent):void {
    e.preventDefault();
}

但似乎它并没有在加载器中捕获错误

更新

我无法分享其中一个swfs,但这里是模拟我重现问题https://www.dropbox.com/s/0spbdzijfpboi47/problematicSwf.swf?dl=0

这是它的初始代码

private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            Security.allowDomain('*');

            tf = new TextField();

            tf.text = 'Me loaded!';

            addChild(tf);
        }

正如您所看到的,它在加载的swf中的allowDomain上崩溃了。 这是我加载它的方式

var ctx:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader.load(new URLRequest(path), ctx);

1 个答案:

答案 0 :(得分:0)

这是一个典型的安全限制,但它是一个非常严格的安全限制,它的目的是确保服务的swf永远不会在它首先使用之外使用。

所以对你的问题的简短回答是这样的:外部加载的swf,用“Security.allowDomain('*');”沙箱化无论如何都不允许沙盒AIR应用程序与它们进行交互。相反,这些swf将能够通过沙箱桥在限制下与父AIR应用程序进行交互。

如果真的无法修改这些swf,那么您将永远无法将它们添加到AIR应用程序中的显示列表或调用其任何方法。沙箱桥对您来说也没用。

这不是你想要听到的答案我敢打赌,但这是你唯一能得到的答案。