Carregamento de conteúdo

Flash Player 9 e posterior, Adobe AIR 1.0 e posterior

O conteúdo do Flash Player e do AIR pode carregar muitos outros tipos de conteúdos, entre eles o seguinte:

  • Arquivos SWF

  • Imagens

  • Som

  • Vídeo

  • Arquivos HTML (apenas AIR)

  • JavaScript (apenas AIR)

Carregamento de arquivos SWF e imagens com a classe Loader

Use a classe Loader para carregar arquivos SWF e imagens (arquivos JPG, GIF ou PNG). Qualquer arquivo SWF, a não ser um que esteja na caixa de proteção local com arquivos do sistema, pode carregar arquivos SWF e imagens de qualquer domínio de rede. Apenas arquivos SWF em caixas de proteção locais podem carregar arquivos SWF e imagens do sistema de arquivos local. No entanto arquivos na caixa de proteção local com rede podem carregar apenas arquivos SWF locais que estejam na mesma caixa de proteção confiável local ou local com rede. Os arquivos SWF na caixa de proteção local com rede carregam conteúdo local que não sejam arquivos SWF (como imagens), no entanto eles não podem acessar dados no conteúdo carregado.

Ao carregar um arquivo SWF a partir de uma origem não confiável (como um domínio diferente daquele do arquivo SWF da raiz do objeto Loader), convém definir uma máscara para o objeto Loader para impedir que o conteúdo carregado (que é filho do objeto Loader) seja desenhado em partes do Palco fora daquela máscara, conforme mostrado no código a seguir:

import flash.display.*; 
import flash.net.URLRequest; 
var rect:Shape = new Shape(); 
rect.graphics.beginFill(0xFFFFFF); 
rect.graphics.drawRect(0, 0, 100, 100); 
addChild(rect); 
var ldr:Loader = new Loader(); 
ldr.mask = rect; 
var url:String = "http://www.unknown.example.com/content.swf"; 
var urlReq:URLRequest = new URLRequest(url); 
ldr.load(urlReq); 
addChild(ldr);

Ao chamar o método load() do objeto Loader, é possível especificar um parâmetro context que é 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). Especifique-a para um arquivo de imagem de um domínio diferente daquele do arquivo que contém o objeto Loader. Se você definir a propriedade como true , o Loader verificará o servidor de origem para obter um arquivo de política de URL (consulte Controles de site (arquivos de política) ). Se o servidor conceder permissão ao domínio Loader, o ActionScript de arquivos SWF no domínio Loader poderá acessar dados na imagem carregada. Em outras palavras, você pode usar a propriedade Loader.content para obter uma referência ao objeto Bitmap que representa a imagem carregada ou os métodos BitmapData.draw() ou BitmapData.drawWithQuality() para acessar pixels da imagem carregada. O método drawWithQuality está disponível no Flash Player 11.3 e superior; AIR 3.3 e superior.

  • 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. Apenas dois valores são suportados atualmente para a propriedade securityDomain : null (o padrão) e SecurityDomain.currentDomain . Se você especificar SecurityDomain.currentDomain , ele solicitará que o arquivo SWF carregado seja importado para a caixa de proteção do arquivo SWF que está sendo carregado, indicando que ele funcionará como se fosse carregado do próprio servidor do arquivo SWF que está sendo carregado. Isso será permitido apenas se um arquivo de política de URL for encontrado no servidor do arquivo SWF carregado, permitindo acesso pelo domínio do arquivo SWF que está sendo carregado. Se o arquivo de política for encontrado, o carregador e o carregado poderão executar script livremente um no outro assim que o carregamento for iniciado, uma vez que estão na mesma caixa de proteção. Observe que a importação da caixa de proteção pode ser substituída principalmente executando um carregamento comum e, em seguida, fazendo com que o arquivo SWF chame o método Security.allowDomain() . Esse último método pode ser mais fácil de usar, pois o arquivo SWF carregado estará em sua própria caixa de proteção natural e, portanto, capaz de acessar recursos de seu próprio servidor real.

  • 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, é possível especificar se ele será colocado em um domínio de aplicativo específico, em vez de ser colocado como padrão em um novo domínio de aplicativo que é filho do domínio do aplicativo do arquivo SWF que está sendo carregado. Observe que os domínios de aplicativos são subunidades de domínios de segurança e portanto você poderá especificar um domínio de aplicativo de destino apenas se o arquivo SWF que está sendo carregado for de seu próprio domínio de segurança, seja porque ele é de seu próprio servidor ou porque você o importou com êxito em seu domínio de segurança usando a propriedade securityDomain . Se você especificar um domínio de aplicativo, mas o arquivo SWF carregado fizer parte de um domínio de segurança diferente, o domínio especificado em applicationDomain será ignorado. Para obter mais informações, consulte Trabalhar com domínios de aplicativo .

Para obter detalhes, consulte Especificação do contexto do carregamento .

Uma propriedade importante de um objeto Loader é a propriedade contentLoaderInfo que é um objeto LoaderInfo. Ao contrário da maioria dos outros objetos, um objeto LoaderInfo é compartilhado entre o arquivo SWF que está sendo carregado e o conteúdo carregado e sempre está acessível para as duas partes. Quando o conteúdo carregado é um arquivo SWF, ele pode acessar o objeto LoaderInfo por meio da propriedade DisplayObject.loaderInfo . Objetos LoaderInfo incluem informações, como o progresso do carregamento, as URLs do carregador e do carregado, o relacionamento de confiança entre o carregador e o carregado e outras informações. Para obter mais informações, consulte Monitoramento do progresso do carregamento .

Carregamento de som e vídeo

Todos o conteúdo, além dos que estão na área de proteção local com o sistema de arquivos, têm permissão para carregar som e vídeo de origens da rede, usando os métodos Sound.load() , NetConnection.connect() e NetStream.play() .

Somente o conteúdo local com o sistema de arquivos e aplicativos AIR podem carregar mídia do sistema de arquivos local. Somente o conteúdo na área de segurança local com o sistema de arquivos, a área de segurança do aplicativo do AIR ou a área de segurança local confiável podem acessar dados nos arquivos carregados.

Há outras restrições ao acessar dados de mídia carregada. Para obter detalhes, consulte Acesso à mídia carregada como dados .

Carregamento de arquivos SWF e de imagens usando a tag <img> em um campo de texto

É possível carregar arquivos SWF e bitmaps em um campo de texto usando a tag <img> , conforme mostrado no código a seguir:

<img src = 'filename.jpg' id = 'instanceName' >

É possível carregar conteúdo carregado dessa maneira usando o método getImageReference() da ocorrência TextField, conforme mostrado no código a seguir:

var loadedObject:DisplayObject = myTextField.getImageReference('instanceName');

No entanto observe que arquivos SWF e imagens carregados dessa maneira são colocados na caixa de proteção que corresponde a sua origem.

Ao carregar um arquivo de imagem usando uma tag <img> em um campo de texto, o acesso aos dados da imagem pode ser permitido por um arquivo de política de URL. É possível verificar se há um arquivo de política adicionando um atributo checkPolicyFile à tag <img> , como no código a seguir:

<img src = 'filename.jpg' checkPolicyFile = 'true' id = 'instanceName' >

Ao carregar um SWF usando uma tag <img> em um campo de texto, é possível permitir acesso aos dados daquele arquivo SWF por meio de uma chamada ao método Security.allowDomain() .

Ao usar uma tag <img> em um campo de texto para carregar um arquivo externo (em vez de usar uma classe Bitmap incorporada em seu SWF), um objeto Loader é criado automaticamente como um filho do objeto TextField, e o arquivo externo é carregado naquele Loader exatamente como se você tivesse usado um objeto Loader no ActionScript para carregar o arquivo. Nesse caso, o método getImageReference() retorna o Loader que foi criado automaticamente. Nenhuma verificação de segurança é necessária para acessar esse objeto Loader porque ele está na mesma caixa de proteção de segurança que o objeto de chamada.

No entanto quando você faz referência à propriedade content do objeto Loader para acessar a mídia carregada, regras de segurança são aplicadas. Se o conteúdo for uma imagem, será necessário implementar um arquivo de política de URL e, se o conteúdo for um arquivo SWF, você precisará fazer com que o código no arquivo SWF chame o método allowDomain() .

Adobe AIR

Na caixa de proteção do aplicativo, as marcas <img> em um campo de texto são ignoradas para evitar ataques de phishing. Além disso, o código executado na caixa de proteção do aplicativo não pode chamar o método de Segurança allowDomain() .

Conteúdo entregue usando servidores RMTP

O Flash Media Server usa o protocolo RTMP para servir dados, áudio e vídeo. É possível carregar esta mídia usando o método connect() da classe NetConnection, passando uma URL de RTMP como o parâmetro. O Flash Media Server pode restringir conexões e impedir que conteúdo seja baixado, com base no domínio do arquivo solicitante. Para obter detalhes, consulte a documentação on-line do Flash Media Server em www.adobe.com/go/learn_fms_docs_br .

Para usar os métodos BitmapData.draw() , BitmapData.drawWithQuality() e SoundMixer.computeSpectrum() e extrair gráficos de tempo de execução e dados de som dos fluxos RTMP, você deve permitir o acesso no servidor. Utilize o ActionScript de lado do servidor Client.videoSampleAccess e as propriedades Client.audioSampleAccess para permitir acesso a diretórios específicos no Flash Media Server. Para obter mais informações, consulte a Referência de linguagem do ActionScript de lado do servidor . (O método drawWithQuality está disponível no Flash Player 11.3 e superior; AIR 3.3 e superior.)