Flash AS3:精简a';通用装载机&x27;

Flash AS3:精简a';通用装载机&x27;,flash,actionscript-3,class,detect,loader,Flash,Actionscript 3,Class,Detect,Loader,在Flash Action script 3中,当您需要加载文本时,您使用名为urloader的类,当您需要加载图像(或.swf)时,您使用名为“Loader”的类。据我所知,使用urloader加载.bmp与将.xml加载到加载程序中一样无用-它不会计算 我正在创建一个类来处理要加载的外部资产队列——但除了拆分目标URL以检查文件扩展名外,我无法找到一个好方法来判断每个URL是否需要URLLoader或Loader。无论如何,可以想象,.php URL可能返回图像或文档,因此无法依靠文件名来指

在Flash Action script 3中,当您需要加载文本时,您使用名为
urloader
的类,当您需要加载图像(或.swf)时,您使用名为“Loader”的类。据我所知,使用
urloader
加载.bmp与将.xml加载到加载程序中一样无用-它不会计算

我正在创建一个类来处理要加载的外部资产队列——但除了拆分目标URL以检查文件扩展名外,我无法找到一个好方法来判断每个URL是否需要
URLLoader
或Loader。无论如何,可以想象,.php URL可能返回图像或文档,因此无法依靠文件名来指定要使用的加载程序类的正确类型


关于如何逐个URL可靠地检测作业的正确类,有什么想法吗?

就我个人而言,如果对象是图像或xml,我会详细说明您希望如何加载对象。由于我已经编写了一些队列加载器,我建议您不要只跟踪URL字符串,而是跟踪一组对象,其中包含要加载的URL、加载优先级和类型。下面是一些psudo代码

class QueueObject{
  var URLtoLoad:String;
  private var hasLoaded:Boolean = false;
  var isDataObject:Boolean = false;
  var queuePriority:Number = 3; // 
}
现在,当您要向队列中添加某些内容时,请在代码中输入

干脆去

var loadObject:QueueObject = new QueueObject();
loadObject.URLtoLoad = "http://theurl.com/somedata.xml";
loadObject. isDataObject= true;
//现在将其放入您编写的awesomeloader类中,该类将管理队列。我将发送要加载的对象、对当前作用域的引用(例如this)以及加载此对象后要调用的函数的名称

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 
上面的类现在应该有一个数组,您可以根据优先级对其进行排序,以便为您提供要加载的项、它们的类型和它们的URL。这样你就可以

这可能有帮助,也可能没有


另一个明智的做法是找出您试图加载的对象的类型,例如BMP,并根据对该对象的查找使用正确的加载程序。

根据url进行一些猜测,也许可以查看源代码,看看它们是如何实现的?

嗯,最棘手的问题是确定目标的类型

  • 查看url相当简单,但可能并不总是有效。。。有些人提供PHP的图像等等
  • 你可以像浏览器一样做。。。开始加载,然后看看它是什么。。。现在再次强调,有多种可能性。。。
  • 将数据作为二进制数据加载。。。完成后,查看开始顺序。。。它是PNG(
    89504e470d0a1a0a
    )吗?GIF(
    474946383961
    )?JPEG(
    FF E0
    )?SWF(
    “FWS”
    (很有趣,不是吗?)?其他任何内容都应该是文本或基于文本的。。。对于图像,使用
    Loader::loadBytes
    …将其加载到
    加载程序中。。。但是要小心SWF。。。您应该只加载这样的图形SWF。。。在任何其他情况下,使用正确的编码将其转换为字符串(理想情况下,文本数据以utf8格式提供)。。。然后你可能已经猜到了,它是XML、JSON还是URL编码的变量。。。尝试解析(使用类
    XML
    com.adobe.serialization.JSON
    flash.net.urlvaries
    )。。。如果一切都失败了,那可能只是文本(你可以试着从表面上验证一下……如果你想得到一些信息,请给我留言)
  • 自己做
    HTTP
    。。。打开套接字并加载源。。。此外,您还将获得mime类型。。。没有什么可以依靠的,但它有助于。。。有一个。。。一旦你有了数据
  • 手动传递类型。。。单纯的。。。你不依赖任何人
  • 加载器和URLLoader之间还有一个重要的区别。。。加载器可以跨域加载数据,只需将其内容沙箱化,这样您就无法查看它。。。URLLoader只能从您的域加载,并且使用跨域策略文件明确允许加载的域

    此外,加载SWF,这不仅仅是外部图形资产,而且您确实想要与之交互,您不应该使用它,因为您需要控制LoaderContext等

    所以,是的。。。无论你选择哪种方式,祝你好运……;)

    格里茨


    back2dos

    我的想法大致相同,但我不确定是否要让它们指定目标是文本还是二进制数据。如果目标url来自另一个源,而他们无法控制它,该怎么办?我真正想要的是找到一种方法来自动检测合适的加载程序类型。良好的链接-看起来它试图根据URL自动检测类型,但允许用户传递额外的参数以绕过此默认行为。我喜欢这个主意。是的,就是这样。在接受自动检测之前,我已经考虑过一些关于自动检测的想法。猜测url文件类型在大多数情况下都是正确的。如果不是,让用户覆盖它。尝试自动检测类型会给您的库增加很多复杂性。。。干杯谢谢你的深入回答!我不知道安全沙箱的角度,查看文件的打开顺序的想法很有趣。。。您可能是对的,但是,最终我会更容易地给他们手动指定类型的选项,然后我会尝试为他们处理它。