Loader.load和Loader.loadBytes的差异

问题描述 投票:2回答:3

我正在将as2 swf加载到AIR应用程序中。从文件加载时它可以正常工作。但是当从字节加载时,它会以某种方式被破坏(它对鼠标作出反应,但某些元素处于非活动状态)

var bytes:ByteArray = ... //loaded from resources
var loader:Loader = new Loader();
var context:LoaderContext = new LoaderContext(false);
context.allowCodeImport = true; //this is neccessary
// Method 1 - blocks some scripts in loaded SWF
//context.applicationDomain = new ApplicationDomain();
// (application domain has no effect with as2 swf)
//context.securityDomain = SecurityDomain.currentDomain; //gives error 2114: securityDomain must be null
loader.loadBytes(bytes, context);
// Method 2 - loads properly
//loader.load(new URLRequest(file.url));

那么为什么不从文件加载呢?我的资源受加密保护,我无法将它们转储到磁盘 - 它们仍然必须受到保护。

正确加载字节可能存在哪些技巧?

similar question,但在我的情况下as2导致更多的问题。

actionscript-3 air actionscript-2
3个回答
4
投票

AS2和AS3使用不同的运行时(字节码不同),因此您将无法在AS3运行时中正确执行任何AS2字节码。你基本上是在你的AS3应用程序中注入AS2代码,所以它不会起作用:/


2
投票

根据LoaderContext的文档,您只应在加载ActionScript 3.0 SWF时使用applicationDomain属性。尝试删除该参数(或将其设置为null),看看会发生什么。


0
投票

似乎将旧的SWF电影(AS1和AS2,需要AVM1)加载到带有load的AIR应用程序中,放入他们自己的域中,但那些加载loadBytes的人共享一个域。因此,如果您有多个装有loadBytes的AVM1 SWF,那么它们的_global属性将相互冲突。这会影响Flash MX UI组件(约2002)。

我不可能是唯一试图在AIR应用程序中打包古代Flash文件的人,因此我认为这些信息可能对某人有用。

© www.soinside.com 2019 - 2024. All rights reserved.