Loader.load和Loader.loadBytes的差异

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Loader.load和Loader.loadBytes的差异相关的知识,希望对你有一定的参考价值。

我正在将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文件的人,因此我认为这些信息可能对某人有用。

以上是关于Loader.load和Loader.loadBytes的差异的主要内容,如果未能解决你的问题,请参考以下文章

PyInstaller 模块和 DLL 缺失

处理 QPluginLoader::load() 抛出的异常

如何将 obj 和 mtl 文件导入到 three.js

三.js JSONLoader 回调

AS3 使用Loader 加载问题

[wxgl] load image fail