Carregamento de dados externosFlash Player 9 e posterior, Adobe AIR 1.0 e posterior O ActionScript 3.0 inclui mecanismos para carregamento de dados de fontes externas. As origens podem fornecer conteúdo estático, como arquivos de texto, ou conteúdo dinâmico, como o conteúdo gerado por um script da Web. Os dados podem ser formatados de diversas maneiras, e o ActionScript oferece a funcionalidade para decodificá-los e acessá-los. Você também pode enviar dados para o servidor externo como parte do processo de recuperação de dados. Uso da classe URLRequestMuitas APIs que carregam dados externos utilizam a classe URLRequest para definir as propriedades da solicitação de rede necessária. Propriedades de URLRequestVocê pode definir as propriedades a seguir de uma objeto URLRequest em qualquer área de segurança:
No AIR, você pode definir propriedades adicionais da classe URLRequest, disponíveis somente no conteúdo AIR, executado na área de segurança do aplicativo. O conteúdo na caixa de proteção do aplicativo também pode definir URLs usando novos esquemas de URL (além de esquemas padrão, como file e http).
Nota: A classe HTMLLoader tem propriedades relacionadas para configurações que pertencem ao conteúdo carregado por um objeto HTMLLoader. Para obter detalhes, consulte Sobre a classe HTMLLoader .
Definir os padrões de URLRequest (somente AIR)A classe URLRequestDefaults permite definir configurações padrão específicas do aplicativo para objetos URLRequest. Por exemplo, o código abaixo define os valores padrão para as propriedades manageCookies e useCache. Todos os objetos URLRequest novos utilizarão os valores especificados para essas propriedades, em vez dos padrões normais: URLRequestDefaults.manageCookies = false; URLRequestDefaults.useCache = false; Nota: A classe URLRequestDefaults é definida para o conteúdo em execução apenas no Adobe AIR. Não há suporte no Flash Player.
A classe URLRequestDefaults inclui um método setLoginCredentialsForHost() que permite especificar um nome de usuário e uma senha padrão para uso em um determinado host. O host, definido no parâmetro hostname do método, pode ser um domínio, como "www.example.com", ou um domínio e um número de porta, como "www.example.com:80". Observe que "example.com", "www.example.com" e "sales.example.com" são todos considerados hosts únicos. Essas credenciais só serão utilizadas se exigidas pelo servidor. Se o usuário já foi autenticado (por exemplo, utilizando a caixa de diálogo de autenticação), a chamada do método setLoginCredentialsForHost() não altera o usuário autenticado. O código a seguir define o usuário padrão e a senha utilizada para solicitações enviadas para www.example.com: URLRequestDefaults.setLoginCredentialsForHost("www.example.com", "Ada", "love1816$X"); As configurações de URLRequestDefaults somente se aplicam ao domínio atual do aplicativo, com uma exceção. As credenciais enviadas para o método setLoginCredentialsForHost() são utilizadas para solicitações feitas em qualquer domínio de aplicativo, dentro do aplicativo AIR. Para obter mais informações, consulte a classe URLRequestDefaults em Referência do ActionScript 3.0 para a plataforma Adobe Flash. Esquemas de URIOs esquemas padrão de URI como os esquemas a seguir, podem ser utilizados em solicitações feitas a partir de qualquer área de segurança: http: e https:Utilize-as para URLs padrão da Internet (da mesma forma como são utilizadas pelo navegador a Web). arquivo:Use file: para especificar o URL de um arquivo localizado no sistema de arquivos local. Por exemplo: file:///c:/AIR Test/test.txt No AIR, também é possível utilizar os esquemas a seguir para definir o URL para conteúdo em execução na área de segurança do aplicativo: app:Use app: para especificar um caminho relativo ao diretório raiz do aplicativo instalado. Por exemplo, o seguinte caminho aponta para um subdiretório de recursos do diretório do aplicativo instalado: app:/resources Quando o aplicativo AIR é executado utilizando o AIR Debug Launcher (ADL), o diretório do aplicativo é o diretório que contém o arquivo descritor do aplicativo. app-storage:Use app-storage: para especificar um caminho relativo ao diretório de armazenamento de dados do aplicativo. Para cada aplicativo (e usuário) instalado, o AIR cria um diretório exclusivo de armazenamento do aplicativo, que é um local útil para armazenar dados específicos desse aplicativo. Por exemplo, o caminho a seguir aponta para o arquivo prefs.xml em um subdiretório de configurações do diretório de armazenamento do aplicativo: app-storage:/settings/prefs.xml A localização do diretório de armazenamento do aplicativo baseia-se no nome do usuário, na ID do aplicativo e na ID do publicador (se aplicável):
Nota: Desde a versão 1.5.3 do AIR, nem todos os aplicativos AIR têm um ID de publicador.
A URL (e a propriedade url) de um objeto File criado com File.applicationStorageDirectory usa o esquema de URL app-storage, como no exemplo abaixo: var dir:File = File.applicationStorageDirectory; dir = dir.resolvePath("preferences"); trace(dir.url); // app-storage:/preferences mailto:Você pode usar o esquema mailto em objetos URLRequests enviados para a função navigateToURL(). Consulte Abertura de um URL em outro aplicativo. Você pode usar um objeto URLRequest que utiliza qualquer um desses esquemas de URL para definir uma solicitação de diferentes objetos como, por exemplo, um objeto FileStream ou Sound. Também é possível usar esses esquemas em um conteúdo HTML em execução no AIR; por exemplo, você pode usá-los no atributo src de uma tag img. Porém, você só pode usar estes esquemas de URI específicos do AIR, (app: e app-storage:) no conteúdo localizado na área de segurança do aplicativo. Para obter mais informações, consulte Segurança do AIR. Esquemas de URI proibidos (no AIR)Algumas APIs permitem iniciar conteúdo em um navegador da Web. Por motivos de segurança, alguns esquemas de URL são proibidos quando essas APIs são utilizadas no AIR. A lista de esquemas proibidos depende da caixa de proteção de segurança do código que usa a API. Para obter detalhes, consulte Abertura de um URL em outro aplicativo. Definição de variáveis de URLEmbora seja possível adicionar variáveis diretamente na sequência de caracteres do URL, pode ser mais fácil utilizar a classe URL Variables para definir quaisquer variáveis necessárias para uma solicitação. Existem três formas em que é possível adicionar parâmetros a um objeto URLVariables:
O exemplo a seguir ilustra todos os três métodos e também como atribuir variáveis ao objeto URLRequest: var urlVar:URLVariables = new URLVariables( "one=1&two=2" ); urlVar.decode("amp=" + encodeURIComponent( "&" ) ); urlVar.three = 3; urlVar.amp2 = "&&"; trace(urlVar.toString()); //amp=%26&2=%26%26&one=1&two=2&three=3 var urlRequest:URLRequest = new URLRequest( "http://www.example.com/test.cfm" ); urlRequest.data = urlVar; Ao definir variáveis no construtor URLVariables ou no método URLVariables.decode(), certifique-se de que os caracteres que possuem um significado especial em uma sequência de caracteres de URI sejam codificados em formato URL. Por exemplo, ao utilizar o & (e comercial) em um nome de parâmetro ou valor, é necessário codificar o &, alterando-o de & para %26, porque o & atua como um delimitador de parâmetros. A função de nível superior encodeURIComponent() pode ser utilizada para isso. Uso da classe URLLoaderA classe URLLoader permite enviar uma solicitação ao servidor e acessar as informações retornadas. Você também pode utilizar a classe URLLoader para acessar arquivos no sistema de arquivos local, onde o acesso de arquivos é permitido (por exemplo, na área de segurança local do Flash Player e do aplicativo AIR). A classe URLLoader baixa dados de um URL como texto, dados binários ou variáveis codificadas em URL. A classe URLLoader envia eventos como complete, httpStatus, ioError, open, progress e securityError. O modelo de manipulação de eventos do ActionScript 3.0 é substancialmente diferente do modelo do ActionScript 2.0 que utilizava os manipuladores de evento LoadVars.onData, LoadVars.onHTTPStatus e LoadVars.onLoad. Para obter mais informações sobre como tratar eventos no ActionScript 3.0, consulte Manipulação de eventos Os dados descarregados só ficam disponíveis depois que o download é concluído. Você pode monitorar o andamento do download (bytes carregados e total de bytes) ouvindo o evento progress a ser despachado. No entanto, se um arquivo é carregado muito rapidamente, o evento progress pode não ser despachado. Quando um arquivo é baixado com sucesso, o evento complete é despachado. Ao definir a propriedade URLLoader dataFormat, é possível receber os dados como texto, raw, dados binários ou como objeto URLVariables. O método URLLoader.load() (e opcionalmente o construtor da classe URLLoader) utiliza um único parâmetro, request, que é um objeto URLRequest. Um objeto URLRequest contém todas as informações para uma única solicitação HTTP, como o URL de destino, método de solicitação (GET ou POST), informações de cabeçalho adicionais e o tipo MIME. Por exemplo, para carregar um pacote XML em um script de servidor, você pode usar o seguinte código: var secondsUTC:Number = new Date().time; var dataXML:XML = <clock> <time>{secondsUTC}</time> </clock>; var request:URLRequest = new URLRequest("http://www.yourdomain.com/time.cfm"); request.contentType = "text/xml"; request.data = dataXML.toXMLString(); request.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); loader.load(request); O snippet anterior cria um documento XML denominado dataXML que contém um pacote XML a ser enviado ao servidor. O exemplo define a propriedade URLRequest contentType para "text/xml" e atribui o documento XML à propriedade URLRequest data. Por fim, o exemplo cria um objeto URLLoader e envia a solicitação para o script remoto utilizando o método load(). Uso da classe URLStreamA classe URLStream fornece acesso aos dados descarregados conforme os dados se tornam disponíveis. A classe URLStream também permite encerrar um fluxo antes que o seu download seja finalizado. Os dados descarregados estão disponíveis como dados binários raw. Ao ler dados de um objeto URLStream, use a propriedade bytesAvailable para determinar se dados suficientes estão disponíveis antes da leitura. Uma exceção EOFError é enviada se você tentar ler mais dados do que o disponível. O evento httpResponseStatus (AIR)No Adobe AIR, a classe URLStream envia um evento httpResponseStatus além do evento httpStatus. O evento httpResponseStatus é entregue antes de quaisquer dados de resposta. O evento httpResponseStatus (representado pela classe HTTPStatusEvent) inclui uma propriedade responseURL, que é o URL do qual a resposta foi retornada, e uma propriedade responseHeaders, que é uma matriz de objetos URLRequestHeader representando os cabeçalhos de resposta retornados pela resposta. Carregamento de dados de documentos externosAo construir aplicativos dinâmicos, pode ser útil carregar os dados de arquivos externos ou de scripts do lado do servidor. Isso permite criar aplicativos dinâmicos sem precisar editar ou recompilar seu aplicativo. Por exemplo, se você criar um aplicativo “dica do dia”, poderá gravar um script do lado do servidor que recupera uma dica aleatória de um banco de dados e salva-a em um arquivo de texto uma vez por dia. Em seguida, o aplicativo pode carregar o conteúdo de um arquivo de texto estático em vez de consultar o banco de dados a cada vez. O seguinte snippet cria um objeto URLRequest e URLLoader que carrega o conteúdo de um arquivo de texto externo, params.txt: var request:URLRequest = new URLRequest("params.txt"); var loader:URLLoader = new URLLoader(); loader.load(request); Por padrão, se você não definir um método de solicitação, o Flash Player e o Adobe AIR carregarão o conteúdo usando o método GET HTTP. Para enviar os dados usando o método POST, defina a propriedade request.method como POST usando a constante estática URLRequestMethod.POST, conforme mostrado no seguinte código:
var request:URLRequest = new URLRequest("sendfeedback.cfm"); request.method = URLRequestMethod.POST; O documento externo (params.txt), que é carregado no tempo de execução, contém os seguintes dados: monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday O arquivo contém dois parâmetros: monthNames e dayNames. Cada parâmetro contém uma lista separada por vírgulas que é analisada como strings. Você pode dividir essa lista em uma matriz usando o método String.split(). ![]() Depois que os dados são carregados, o evento complete é despachado, e o conteúdo do documento externo fica disponível para uso na propriedade data de URLLoader, como ilustrado neste código:
function completeHandler(event) { var loader2 = event.target; air.trace(loader2.data); } Se o documento remoto contém pares de nome e valor, é possível analisar os dados através da classe URLVariables passando o conteúdo do arquivo carregado, como segue: private function completeHandler(event:Event):void { var loader2:URLLoader = URLLoader(event.target); var variables:URLVariables = new URLVariables(loader2.data); trace(variables.dayNames); } Cada par de nome e valor do arquivo externo é criado como propriedade no objeto URLVariables. Cada propriedade no objeto variables do exemplo de código anterior é tratada como string. Se o valor do par de nome e valor é uma lista de termos, você pode converter a string em qualquer matriz chamando o método String.split(), como segue: var dayNameArray:Array = variables.dayNames.split(","); ![]() Em vez de carregar o conteúdo do arquivo remoto como uma string e criar um novo objeto URLVariables, você pode definir a propriedade URLLoader.dataFormat como uma das propriedades estáticas encontradas na classe URLLoaderDataFormat. Os três valores possíveis para a propriedade URLLoader.dataFormat são os seguintes:
O código a seguir demonstra como a configuração da propriedade URLLoader.dataFormat como URLLoaderDataFormat.VARIABLES permite analisar automaticamente dados carregados em um objeto URLVariables: package { import flash.display.Sprite; import flash.events.*; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; public class URLLoaderDataFormatExample extends Sprite { public function URLLoaderDataFormatExample() { var request:URLRequest = new URLRequest("http://www.[yourdomain].com/params.txt"); var variables:URLLoader = new URLLoader(); variables.dataFormat = URLLoaderDataFormat.VARIABLES; variables.addEventListener(Event.COMPLETE, completeHandler); try { variables.load(request); } catch (error:Error) { trace("Unable to load URL: " + error); } } private function completeHandler(event:Event):void { var loader:URLLoader = URLLoader(event.target); trace(loader.data.dayNames); } } } Nota: O valor padrão de URLLoader.dataFormat é URLLoaderDataFormat.TEXT.
Como ilustrado no exemplo a seguir, carregar XML de um arquivo externo é o mesmo que carregar URLVariables. Você pode criar uma ocorrência de URLRequest e uma de URLLoader e usá-las para baixar um documento XML remoto. Quando o arquivo é baixado completamente, o evento Event.COMPLETE é despachado e o conteúdo do arquivo externo é convertido para uma ocorrência XML, que pode ser analisada usando métodos e propriedades XML. package { import flash.display.Sprite; import flash.errors.*; import flash.events.*; import flash.net.URLLoader; import flash.net.URLRequest; public class ExternalDocs extends Sprite { public function ExternalDocs() { var request:URLRequest = new URLRequest("http://www.[yourdomain].com/data.xml"); var loader:URLLoader = new URLLoader(); loader.addEventListener(Event.COMPLETE, completeHandler); try { loader.load(request); } catch (error:ArgumentError) { trace("An ArgumentError has occurred."); } catch (error:SecurityError) { trace("A SecurityError has occurred."); } } private function completeHandler(event:Event):void { var dataXML:XML = XML(event.target.data); trace(dataXML.toXMLString()); } } } Comunicação com scripts externosAlém de carregar arquivos de dados externos, você pode usar também a classe URLVariables para enviar variáveis a um script do lado do servidor e processar a resposta do servidor. Isso é útil, por exemplo, se você está programando um jogo e deseja enviar a pontuação do usuário para um servidor, que calculará se ela deve ser adicionada à lista de pontuações mais altas, ou mesmo enviar informações de logon de um usuário para um servidor validá-las. Um script de servidor pode processar o nome do usuário e a senha, validá-los em um banco de dados e confirmar se as credenciais fornecidas pelo usuário são válidas. O seguinte snippet cria um objeto URLVariables denominado variables que cria uma nova variável chamada name. Em seguida, é criado um objeto URLRequest que especifica a URL do script de servidor para a qual enviar as variáveis. Depois, você define a propriedade method do objeto URLRequest para enviar as variáveis como uma solicitação HTTP POST. Para adicionar o objeto URLVariables à solicitação de URL, defina a propriedade data do objeto URLRequest como o objeto URLVariables criado anteriormente. Por fim, é criada a ocorrência de URLLoader e o método URLLoader.load(), que inicia a solicitação, é chamado. var variables:URLVariables = new URLVariables("name=Franklin"); var request:URLRequest = new URLRequest(); request.url = "http://www.[yourdomain].com/greeting.cfm"; request.method = URLRequestMethod.POST; request.data = variables; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; loader.addEventListener(Event.COMPLETE, completeHandler); try { loader.load(request); } catch (error:Error) { trace("Unable to load URL"); } function completeHandler(event:Event):void { trace(event.target.data.welcomeMessage); } O código a seguir contém o conteúdo do documento greeting.cfm do Adobe ColdFusion® usado no exemplo anterior: <cfif NOT IsDefined("Form.name") OR Len(Trim(Form.Name)) EQ 0> <cfset Form.Name = "Stranger" /> </cfif> <cfoutput>welcomeMessage=#UrlEncodedFormat("Welcome, " & Form.name)# </cfoutput> |
![]() |