Carregamento dinâmico do conteúdo da exibição

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

Você pode carregar qualquer uma dos seguintes ativos de exibição externos em um aplicativo ActionScript 3.0:

  • Um arquivo SWF criado no ActionScript 3.0 - Esse arquivo pode ser uma classe Sprite, MovieClip ou qualquer classe que estende Sprite.

  • Um arquivo de imagem - Isso inclui arquivos JPG, PNG e GIF.

  • Um arquivo SWF AVM1 - Arquivo SWF gravado no ActionScript 1.0 ou 2.0.

Carregue esses ativos usando a classe Loader.

Carregamento de objetos de exibição

Os objetos Loader são usados para carregar arquivos SWF e de imagem em um aplicativo. A classe Loader é uma subclasse de DisplayObjectContainer. Um objeto Loader pode conter apenas um objeto de exibição filho na lista de exibição, o objeto que representa o arquivo SWF ou de imagem carregado. Quando você adiciona um objeto Loader à lista de exibição, como no código a seguir, também pode adicionar o objeto filho carregado à lista de exibição após o carregamento:

var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
this.addChild(pictLdr);

Assim que o arquivo SWF ou imagem é carregado, você pode mover o objeto de exibição carregado para outro contêiner, como o objeto container DisplayObjectContainer neste exemplo:

import flash.display.*; 
import flash.net.URLRequest; 
import flash.events.Event; 
var container:Sprite = new Sprite(); 
addChild(container); 
var pictLdr:Loader = new Loader(); 
var pictURL:String = "banana.jpg" 
var pictURLReq:URLRequest = new URLRequest(pictURL); 
pictLdr.load(pictURLReq); 
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);  
function imgLoaded(event:Event):void 
{ 
    container.addChild(pictLdr.content);  
}

Monitoramento do progresso do carregamento

Assim que o arquivo começa a ser carregado, um objeto LoaderInfo é criado. Um objeto LoaderInfo fornece informações como o progresso do carregamento, os URLs do carregador e do conteúdo carregado, o número de bytes totais para a mídia e a altura e largura nominais da mídia. O objeto LoaderInfo também envia eventos para o monitoramento do progresso do carregamento.

O diagrama a seguir mostra os diferentes usos do objeto LoaderInfo - para a ocorrência da classe principal do arquivo SWF, para um objeto Loader e para um objeto carregado por Loader:

O objeto LoaderInfo pode ser acessado como uma propriedade do objeto Loader e do objeto de exibição carregado. Assim que o carregamento começa, o objeto LoaderInfo pode ser acessado por meio da propriedade contentLoaderInfo do objeto Loader. Quando o carregamento do objeto de exibição termina, o objeto LoaderInfo também pode ser acessado como uma propriedade do objeto de exibição carregado pela propriedade loaderInfo. A propriedade loaderInfo do objeto de exibição carregado refere-se ao mesmo objeto LoaderInfo da propriedade contentLoaderInfo do objeto Loader. Em outras palavras, um objeto LoaderInfo é compartilhado entre um objeto carregado e o objeto Loader que o carregou (entre o carregador e o carregado).

Para acessar as propriedades do conteúdo carregado, adicione um ouvinte de eventos ao objeto LoaderInfo, assim como no código a seguir:

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
 
var ldr:Loader = new Loader(); 
var urlReq:URLRequest = new URLRequest("Circle.swf"); 
ldr.load(urlReq); 
ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
addChild(ldr); 
 
function loaded(event:Event):void 
{ 
    var content:Sprite = event.target.content; 
    content.scaleX = 2; 
}

Para obter mais informações, consulte Manipulação de eventos.

Especificação do contexto do carregamento

Quando você carrega um arquivo externo no Flash Player ou no AIR com o método load() ou loadBytes() da classe Loader, pode especificar, se desejar, um parâmetro context. Este parâmetros é um objeto LoaderContext.

A classe LoaderContext inclui três propriedades que permitem definir o contexto de como o conteúdo carregado pode ser usado:

  • checkPolicyFile: Use essa propriedade apenas ao carregar um arquivo de imagem (não um arquivo SWF). Se você definir a propriedade como true, o Loader verificará o servidor de origem para obter um arquivo de política (consulteControles de site (arquivos de política)). Isso é necessário apenas para o conteúdo originado de domínios diferentes dos domínios do arquivo SWF que contém o objeto Loader. Se o servidor conceder permissão ao domínio de Loader, o ActionScript dos arquivos SWF do domínio de Loader poderá acessar os dados na imagem carregada; em outras palavras, você pode usar o comando BitmapData.draw() para acessar os dados na imagem carregada.

    Observe que um arquivo SWF de outros domínios que não são os do objeto Loader pode chamar Security.allowDomain() para permitir um domínio específico.

  • securityDomain: Só use essa propriedade ao carregar um arquivo SWF (não uma imagem). Especifique-a para um arquivo SWF de um domínio diferente daquele do arquivo que contém o objeto Loader. Quando essa opção é especificada, o Flash Player verifica a existência de um arquivo de política e, se existir algum, os arquivos SWF dos domínios permitidos no arquivo de política poderão cruzar o script do conteúdo SWF carregado. Você pode especificar flash.system.SecurityDomain.currentDomain como este parâmetro.

  • applicationDomain: Use essa propriedade apenas ao carregar um arquivo SWF gravado no ActionScript 3.0 (não em uma imagem ou arquivo SWF gravado no ActionScript 1.0 ou no ActionScript 2.0). Ao carregar o arquivo, você pode especificar que o arquivo seja incluído no mesmo domínio de aplicativo do objeto Loader, definindo o parâmetro applicationDomain como flash.system.ApplicationDomain.currentDomain. Colocando o arquivo SWF carregado no mesmo domínio de aplicativo, é possível acessar suas classes diretamente. Isso pode ser útil se estiver carregando um arquivo SWF que contém mídia incorporada, que pode ser acessada por meio dos nomes de classe associados. Para obter mais informações, consulte Trabalhar com domínios de aplicativo.

Veja um exemplo de busca de um arquivo de política ao carregar um bitmap de outro domínio:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/photo11.jpg"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Veja um exemplo de busca de um arquivo de política ao carregar um SWF de outro domínio para colocar o arquivo na mesma caixa de proteção do objeto Loader. Além disso, o código adiciona as classes do arquivo SWF carregado ao mesmo domínio de aplicativo do objeto Loader:

var context:LoaderContext = new LoaderContext(); 
context.securityDomain = SecurityDomain.currentDomain; 
context.applicationDomain = ApplicationDomain.currentDomain; 
var urlReq:URLRequest = new URLRequest("http://www.[your_domain_here].com/library.swf"); 
var ldr:Loader = new Loader(); 
ldr.load(urlReq, context);

Para obter mais informações, consulte a classe LoaderContext em Referência do ActionScript 3.0 para a plataforma Adobe Flash.