Pregunta

En Flash Action script 3, cuando necesita cargar texto, usa una clase llamada URLLoader, y cuando necesite cargar una imagen (o .swf), usa una clase llamada 'cargador'. Hasta donde yo sé, cargando un .bmp con URLLoader es tan inútil como cargar un .xml en un cargador: no se calcula.

Estoy creando una clase que maneja una cola de recursos externos para cargar, pero aparte de dividir la URL de destino para verificar la extensión del archivo, no puedo encontrar una buena manera de saber si cada URL requiere una URLLoader o un cargador.En cualquier caso, es imaginable que una URL .php pueda devolver una imagen o un documento, por lo que no hay forma de contar con los nombres de los archivos para dictar el tipo correcto de clase de cargador a usar.

¿Alguna idea sobre cómo detectar de manera confiable la clase adecuada para el trabajo URL por URL?

¿Fue útil?

Solución

así, la pregunta más difícil, es determinar el tipo del objetivo ...

  1. mirando la url es bastante simple, pero puede que no siempre funciona ... algunas personas sirven imágenes de phps y así sucesivamente ...
  2. usted podría hacerlo como navegador ... iniciar la carga, y luego ver lo que es ... ahora de nuevo, hay múltiples posibilidades ...
    1. cargar los datos como datos binarios ... cuando se hace, mira la secuencia de arranque ... ¿es PNG (89 50 4E 47 0D 0A 1A 0A)? GIF (47 49 46 38 39 61)? JPEG (FF E0)? SWF ("FWS" (divertido, ¿verdad?))? todo lo demás debe ser texto o texto basado ... en el caso de una imagen, cargarlo en una Loader con Loader::loadBytes ... cuidado con SWF aunque ... sólo se debe cargar SWF graphicals así ... en cualquier otro caso, convertirlo en una cadena mediante la codificación correcta (a ser posible de datos de texto se sirve en UTF-8) ... entonces tal vez ya se puede adivinar, si puede ser XML, JSON o variables con codificación URL ... intenta analizar (el uso de clases XML, com.adobe.serialization.JSON, flash.net.URLVariables) ... si todo falla, es probable que sólo texto (se puede tratar de verificar que superficialmente ... si quieres un poco de entrada en eso, me dejan un comentario) ...
    2. hacer lo mismo ... HTTP abrir un socket y cargar la fuente ... obtendrá tipos MIME, además ... nada que se pueda confiar, pero ayuda ... hay un aplicación HTTP en AS3 ... una vez que tenga los datos
  3. pasar el tipo manualmente ... pura y simple ... y no depender de nadie ...

También hay una diferencia importante entre el cargador y URLLoader ... cargador puede cargar dominios de datos cruzando, sencillamente sandboxing su contenido por lo que no se puede ver en él ... URLLoader puede única carga de su dominio y dominios que explícitamente permite esto el uso de los archivos de política entre dominios ...

También, la carga de archivos SWF, que no son activos gráficos simplemente externos, pero que realmente quieren interactuar con, usted no debe utilizar este, ya que se necesita el control sobre la LoaderContext etc ...

Así que, sí ... lo que sea la forma que elija, buena suerte ...;)

greetz

back2dos

Otros consejos

Bulkloader hace algunas conjeturas sobre la base de la url, tal vez echar un vistazo en la fuente y ver cómo lo hacen?

En lo personal, me gustaría especificar exactamente cómo le gustaría a usted se opone cargar si se trata de una imagen o xml. Desde que he escrito algunos cargadores de cola, sugiero que usted no acaba de realizar un seguimiento de una cadena URL, sino un conjunto de objetos con cosas como, la URL para cargar, si se ha cargado, la prioridad de carga, y el tipo. Aquí hay un código psudo.

class QueueObject{
  var URLtoLoad:String;
  private var hasLoaded:Boolean = false;
  var isDataObject:Boolean = false;
  var queuePriority:Number = 3; // 
}

Ahora en su código cuando se desea agregar algo en su cola.

simplemente vaya

var loadObject:QueueObject = new QueueObject();
loadObject.URLtoLoad = "http://theurl.com/somedata.xml";
loadObject. isDataObject= true;

// Ahora empujar esto en la clase Loader impresionante que usted ha escrito que gestionará la cola. Me gustaría enviar el objeto de cargar, la referencia al ámbito actual, por ejemplo, esto, y el nombre de la función que desea llamar cuando este objeto se ha cargado.

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

Esa clase anterior debe ahora tener una matriz, que se puede ordenar por prioridad para darle elementos para la carga, lo que sus tipos son y su URL. De esta manera usted puede

Esto podría ayudar o no.

De otra manera hacer algo para averiguar qué tipo de objeto que está tratando de cargar, por ejemplo, BMP y utilizar el cargador correcto basado en una búsqueda para este objeto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top