我正在处理用AS1和AS2编写的大量旧版SWF。这些SWF广泛使用loadMovieNum
。
我正在尝试将这些应用程序集成到一个新的基于Air的应用程序中(用AS3或Flex编写)。但是,loadMovieNum
似乎无法在Air应用程序中运行。
例如,AS2 SWF(file1.swf
)可能会尝试使用以下方法加载另一个AS2 SWF:
loadMovieNum("http://127.0.0.1/file2.swf", 5);
如果SWF是独立播放的,但是如果它是在Air应用程序中播放,则可以正常工作,但它会失败。
编辑:Air应用中发生的事情是file1.swf
将成功加载,但无法加载file2.swf
。没有错误也没有例外。 <{1}}周围try...catch
报告任何内容,loadMovieNum
继续播放。
Air应用程序的相关代码如下:
AS3版本:
file1.swf
Flex版:
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);
}
只是<mx:SWFLoader id="swfObj" source="http://127.0.0.1/file1.swf" />
无法在Air中运行?或者有什么可以做的。显然,对传统SWF进行大量更改是不可能的。
提前致谢。
答案 0 :(得分:0)
我得出结论,直接加载到Air应用程序的SWF中不支持_level
。例如,偶数_level0
(应始终定义)返回undefined
。因此,loadMovieNum
似乎不太可能得到支持。
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" />
不幸的是,所有Air配置文件都不支持HTML组件。特别是在我的情况下,电视配置文件不支持它。
答案 1 :(得分:0)
虽然看起来可能不直观,但这似乎是一个安全问题。当AS2内容加载其他AS2内容时,它们必须位于同一安全沙箱中才能运行。
为了测试这个理论,我创建了一个快速样本,我是对的。它在Flash中工作的原因是因为AS2内容与其加载的内容位于同一个沙箱中。但AIR安全性不同。因此,当您在AIR中加载AS2内容(使用您提供的逻辑)时,加载器将被放入应用程序沙箱中。沙箱现在与其加载的内容不同,因此它拒绝加载它们。 这解释了为什么它在使用HTML包装器时有效。当HTML加载swf时,它可能会被放入local-with-network沙箱中,该沙箱与内容相同。
所以...你如何解决它? 您可以尝试在不同的安全沙箱中加载内容。但实际上问题是AS3安全性与AS2安全性不相称。我的建议是在没有AS3包装器的情况下创建AIR应用程序。您不能直接在工具中执行此操作,但您应该能够使用ADT打包程序来执行此操作。在xml描述符中,将初始内容设为AS2 swf,并将其打包在一起。现在,当您启动AIR应用程序时,它使用AS2 swf作为主应用程序。突然,您的文件应该都在同一个安全沙箱中,Flash不会阻止任何内容运行。
您可以使用ADL本地测试此应用程序,而不是直接从Flash Professional或Flash Builder启动应用程序。 (它们都使用ADL,但如果直接调用它,则可以更好地控制所使用的参数。)
编辑:显然,您不能将AS2 swf作为桌面AIR应用程序的主swf。 (我已经在桌面上使用ADL进行了测试,但它有效,但我被告知您无法使用此设置在桌面上安装AIR应用程序。)因此,对于桌面,您可能希望使用HTML解决方法。 AIR for TV 支持此功能,因此这适用于这些设备。