Pergunta

No Flash Action Script 3, quando você precisa de texto de carga, você usa uma classe chamada URLLoader, e quando você precisa carregar uma imagem (ou .swf) você usa uma classe chamada 'Loader.' Tanto quanto eu sei, o carregamento de uma .bmp com URLLoader é tão inútil como carregar um .xml em um Loader -. Isso não computa

Eu estou fazendo uma classe que lida com uma fila de ativos externos a ser carregado - mas além de rachar o URL de destino para verificar a extensão do arquivo, eu não consigo descobrir uma boa maneira de saber se cada URL requer um URLLoader ou um Loader. De qualquer forma, é imaginável que uma URL .php pode retornar uma imagem ou um documento - por isso não há maneira de contar com os nomes de arquivo para ditar o tipo certo de classe loader para uso

.

Algumas ideias sobre como detectar com fiabilidade a classe certa para o trabalho em uma base URL-a-URL?

Foi útil?

Solução

Bem, a pergunta mais complicada, é determinar o tipo do alvo ...

  1. olhando para o url é bastante simples, mas pode nem sempre trabalho ... algumas pessoas servir imagens phps e assim por diante ...
  2. você poderia fazê-lo como navegador ... começar a carregar, e depois olhar para o que é ... agora de novo, há várias possibilidades ...
    1. carregar os dados como dados binários ... quando feito, olhar para a seqüência de partida ... é PNG (89 50 4E 47 0D 0A 1A 0A)? GIF (47 49 46 38 39 61)? JPEG (FF E0)? SWF ("FWS" (engraçado, não é?))? qualquer outra coisa deve ser de texto ou de texto baseado ... no caso de uma imagem, carregá-lo em um Loader com Loader::loadBytes ... ter cuidado com SWF embora ... você só deve carregar graphicals SWFs assim ... em qualquer outra caso, convertê-lo em uma string usando a codificação direita (idealmente dados de texto é servido em utf8) ... então talvez você já pode imaginar, se ele pode ser XML, JSON ou variáveis ??URL-codificados ... tente analisar (usando classes XML, com.adobe.serialization.JSON, flash.net.URLVariables) ... se tudo falhar, é provavelmente apenas de texto (você pode tentar verificar se superficialmente ... se você quiser algumas informações sobre isso, me deixe um comentário) ...
    2. faça o HTTP si mesmo ... abrir um socket e carregar a fonte ... você vai ter mime-types além ... nada que você pode confiar, mas ajuda ... há um implementação HTTP em AS3 ... uma vez que você tem os dados
  3. passe o tipo manualmente ... pura e simples ... e você não confiar em ninguém ...

também há uma diferença importante entre Loader e URLLoader ... Loader pode carregar dados accross domínios, simplesmente sandboxing seu conteúdo para que você não pode olhar para ele ... URLLoader só pode carregar a partir do seu domínio e domínios que explicitamente permitem este usando arquivos de política de domínio cruzado ...

Além disso, os fundos soberanos de carregamento, que não são elementos gráficos apenas externas, mas você realmente quer fazer a interface com, você não deve usar isso, pois você precisa de controle sobre a LoaderContext etc ...

Então, sim ... qualquer que seja a forma que escolher, boa sorte ...;)

greetz

back2dos

Outras dicas

bulkloader faz algumas suposições com base na URL, talvez dar uma olhada em a fonte e ver como eles fazem isso?

Pessoalmente, gostaria de especificar exatamente como você gostaria de carregar você opor-se se é uma imagem ou xml. Desde que eu tenha escrito alguns carregadores de fila, eu sugiro que você Não basta controlar uma seqüência de URL, mas um conjunto de objetos com coisas como, o URL para carregar, se ele foi carregado, prioridade de carga e tipo. Aqui está um código psudo.

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

Agora, em seu código quando você deseja adicionar algo em sua fila.

simplesmente ir

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

// Agora empurrar este para a classe loader impressionante que você tenha escrito que irá gerenciar a fila. Eu iria enviar o objeto a carga, a referência para o atual escopo, por exemplo, este, bem como o nome da função que você deseja chamar quando este objeto foi carregado.

MyStaticLodingClass.addQueueObject(loadObject, this, myFunctionThatYouWillCallWhenDone); 

Essa classe acima deve agora ter um array que pode ordenar por prioridade para lhe dar itens para carregar, o que os seus tipos são e seu URL. Desta forma, você pode

Isto pode ajudar ou não.

Outro sábio fazer algo para descobrir qual o tipo de objeto que você está tentando carregar, por exemplo, BMP e usar o carregador correto baseado em uma pesquisa para este objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top