【发布时间】:2016-03-13 01:20:09
【问题描述】:
我有什么
大量 swfs 没有它的来源(所以我无法修改它)
我需要什么
用我的 AIR 应用加载和播放这个 swfs。
问题
问题是这个 swfs 似乎有
Security.allowDomain('*')
在他们的源代码中,所以他们会抛出
SecurityError:错误 #3207:应用程序沙盒内容无法访问 这个功能。
在我加载它之后。我知道 Air 不需要使用这条线,但我的完整应用程序不会在加载其中一个 swf 后停止执行,而不是忽略或警告它。如果我可以尝试/捕获这个字符串,但正如我所说,我没有那个 swfs 的来源,所以我唯一能做的就是修改我的 AIR 应用程序。
我尝试了什么
我已经尝试过通过做来捕获加载器中的所有错误
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loaderIOErrorHandler);
private function loaderIOErrorHandler(e:IOErrorEvent):void {
e.preventDefault();
}
但它似乎根本没有在加载程序中捕获错误
更新
我无法分享其中一个 swf,但这是我制作的模拟问题,用于重现问题 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);
【问题讨论】:
-
看看uncaughtErrorEvents ...
-
@akmozo 谢谢你的回答。我在处理程序中尝试了
loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);和loader.contentLoaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);和event.preventDefautl(),但是没有任何工作和异常仍然会中断执行而不进入处理程序(我在处理程序内的跟踪不会发生) -
loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler)应该可以工作!您确定该错误是从您加载的 SWF 中触发的吗?尝试提供有关该错误的更多详细信息,如果有可能,您能分享其中一个 SWF 吗? -
try{} catch(e:UNCAUGHT_ERROR){} 语句?
-
@quantomworks 感谢您的回答。正如我在问题中所说,我无法修改外部 swfs 的来源,因此没有机会在其中添加 try catch。我所能做的就是修改 AIR 应用程序代码,但是当加载器执行代码时,异步 try catch "loader.load" 不起作用。
标签: actionscript-3 flash air