我有什么
没有它的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);
答案 0 :(得分:0)
这是一个典型的安全限制,但它是一个非常严格的安全限制,它的目的是确保服务的swf永远不会在它首先使用之外使用。
所以对你的问题的简短回答是这样的:外部加载的swf,用“Security.allowDomain('*');”沙箱化无论如何都不允许沙盒AIR应用程序与它们进行交互。相反,这些swf将能够通过沙箱桥在限制下与父AIR应用程序进行交互。
如果真的无法修改这些swf,那么您将永远无法将它们添加到AIR应用程序中的显示列表或调用其任何方法。沙箱桥对您来说也没用。
这不是你想要听到的答案我敢打赌,但这是你唯一能得到的答案。