我正在使用大量用AS1和AS2编写的遗留主权财富基金。这些主权财富基金广泛使用loadMovieNum。
我正在尝试将它们集成到一个新的基于空气的应用程序中(用AS3或Flex编写)。然而,loadMovieNum似乎无法在Air应用程序中工作。
例如,AS2 SWF (file1.swf)可能尝试使用以下方法加载另一个AS2 SWF:
loadMovieNum("http://127.0.0.1/file2.swf", 5);这很好,如果SWF是不可靠的发挥,但如果它是从内部的空气应用程序,它失败。
编辑:在Air应用程序中所发生的事情是,file1.swf将成功加载,但无法加载file2.swf。没有错误,也没有例外。一个围绕着try...catch的loadMovieNum报告什么都没有,file1.swf继续播放。
Air应用程序的相关代码如下:
AS3版本:
var mLoader:Loader = new Loader();
var mRequest:URLRequest = new URLRequest("http://127.0.0.1/file1.swf");
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
mLoader.load(mRequest, loaderContext);
function onCompleteHandler(loadEvent:Event):void
{
// Add to the stage
addChild(mLoader.content.parent);
}Flex版本:
<mx:SWFLoader id="swfObj" source="http://127.0.0.1/file1.swf" />很简单,loadMovieNum不会在空气中工作吗?或者有什么可以做的。显然,对遗留的主权财富基金进行广泛的改变是不可能的。
提前谢谢。
发布于 2011-08-25 09:52:41
我的结论是,_level在直接加载到Air应用程序的主权财富基金中不受支持。例如,即使_level0 (应该总是定义)返回为undefined。因此,似乎不太可能支持loadMovieNum。
不过,我已经找到了解决办法。使用Air中的HTML浏览器组件,可以将包含AS2/1 SWFs的网页加载到Air应用程序中。如果您这样做,那么loadMovieNum在AS2/1文件中就会像预期的那样工作。
AS3版本:
var hLoader:HTMLLoader = new HTMLLoader();
addChild(hLoader);
hLoader.width = stage.stageWidth;
hLoader.height = stage.stageHeight;
hLoader.load(new URLRequest("file1.html"));Flex版本:
<mx:HTML id="minibrowser" width="100%" height="100%" location="file1.html" />不幸的是,HTML组件并不是所有Air配置文件都支持的。特别是,在我的情况下,它不支持电视资料。
发布于 2011-08-30 18:49:02
虽然这看上去并不直观,但这似乎是一个安全问题。当AS2内容加载其他AS2内容时,它们必须位于同一个安全沙箱中才能运行。
我创造了一个快速的样本来测试这个理论,我是对的。它在Flash中工作的原因是因为AS2内容与它正在加载的内容位于同一个沙箱中。但空中安全是不同的。因此,当您在AIR中加载AS2内容时(使用您提供的逻辑),加载程序将被放入应用程序沙箱中。沙箱现在与它正在加载的内容不同,所以它拒绝加载它们。这解释了为什么它在使用HTML包装时工作。当HTML加载swf时,它可能会被放入与内容相同的本地网络沙箱中。
所以..。如何修复它?,您可以尝试将内容加载到不同的安全沙箱中。但真正的问题是,AS3安全性与AS2安全性不太好。我的建议是在没有AS3包装的情况下创建AIR应用程序。您不能在工具中直接这样做,但是您应该能够使用ADT包器来完成它。在xml描述符中,将初始内容设置为AS2 swf,并将其打包在一起。现在,当您启动AIR应用程序时,它使用AS2 swf作为主要应用程序。突然之间,您的文件应该都位于同一个安全沙箱中,而且Flash不会阻止任何内容的运行。
您可以使用ADL在本地测试这个应用程序,而不是直接从或Flash启动它。(它们都使用ADL,但如果直接调用ADL,则可以更好地控制所使用的参数。)
编辑:显然不能将AS2 swf作为桌面应用程序的主要swf。(我已经在桌面上使用ADL进行了测试,它可以工作,但有人告诉我,您将无法使用此设置在桌面上安装AIR应用程序。)因此,对于桌面,您可能希望使用HTML解决方案。--这是电视的AIR支持的,所以这可以在这些设备上工作。
https://stackoverflow.com/questions/7178758
复制相似问题