在Flash Action脚本3中,当您需要加载文本时,使用名为URLLoader
的类,当您需要加载图像(或.swf)时,使用名为“Loader”的类。据我所知,使用URLLoader
加载.bmp与将.xml加载到Loader中一样无用 - 它不会计算。
我正在创建一个处理要加载的外部资产队列的类 - 但除了拆分目标URL以检查文件扩展名外,我无法找出一个好方法来判断每个URL是否需要URLLoader
或装载机。无论如何,可以想象一个.php URL可能返回一个图像或一个文档 - 所以没有办法指望文件名来指定要使用的正确类型的加载器类。
关于如何在逐个URL的基础上可靠地检测作业的正确类的任何想法?
答案 0 :(得分:2)
嗯,最棘手的问题是确定目标的类型......
89 50 4E 47 0D 0A 1A 0A
)吗? GIF(47 49 46 38 39 61
)? JPEG(FF E0
)? SWF("FWS"
(有趣,不是吗?))?其他任何东西应该是基于文本或文本的...在图像的情况下,将其加载到Loader
Loader::loadBytes
...但要小心SWF虽然...你应该只加载图形SWFs像那样...在任何其他情况下,使用正确的编码将其转换为String(理想情况下,文本数据在utf8中提供)...然后你可以猜测,它是否可以是XML,JSON或URL编码的变量...尝试解析(使用类XML
,com.adobe.serialization.JSON
,flash.net.URLVariables
)...如果一切都失败了,它可能只是文本(你可以尝试验证表面上......如果你想要一些意见,请给我留言...... HTTP
...打开一个套接字并加载源...你还会得到mime-types ......你可以依赖它,但它有助于...有一个HTTP
implementation in AS3
...一旦掌握了数据Loader和URLLoader之间也存在一个重要的区别...... Loader可以在域中加载数据,只需对其内容进行沙盒处理,以便您无法查看... URLLoader只能从您的域加载,而域名明确允许这样做使用跨域策略文件...
另外,加载SWF,不仅仅是外部图形资源,但你真的想与之交互,你不应该使用它,因为你需要控制LoaderContext等......
所以,是的......无论你选择什么,祝你好运......;)
格尔茨
back2dos
答案 1 :(得分:1)
Bulkloader会根据网址做一些猜测,或者看一下源代码并看看他们是如何做到的?
答案 2 :(得分:0)
就我个人而言,如果它是图像或xml,我会准确指定你想要加载对象的方式。由于我编写了一些队列加载器,我建议你不要只跟踪一个URL字符串,而是跟踪一组对象,如加载的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;
//现在将其推送到您编写的将管理队列的令人敬畏的加载器类中。我会发送对象加载,对当前作用域的引用,例如,以及加载此对象时要调用的函数的名称。
MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone);
上面的那个类现在应该有一个数组,您可以按优先级排序,为您提供要加载的项目,它们的类型和URL。这样你就可以
这可能有所帮助。
其他明智的做法是弄清楚你想要加载什么类型的对象,例如BMP,并根据对该对象的查找使用正确的加载器。