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