我正在将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导致更多的问题。
AS2和AS3使用不同的运行时(字节码不同),因此您将无法在AS3运行时中正确执行任何AS2字节码。你基本上是在你的AS3应用程序中注入AS2代码,所以它不会起作用:/
根据LoaderContext
的文档,您只应在加载ActionScript 3.0 SWF时使用applicationDomain
属性。尝试删除该参数(或将其设置为null),看看会发生什么。
似乎将旧的SWF电影(AS1和AS2,需要AVM1)加载到带有load
的AIR应用程序中,放入他们自己的域中,但那些加载loadBytes
的人共享一个域。因此,如果您有多个装有loadBytes
的AVM1 SWF,那么它们的_global
属性将相互冲突。这会影响Flash MX UI组件(约2002)。
我不可能是唯一试图在AIR应用程序中打包古代Flash文件的人,因此我认为这些信息可能对某人有用。