Download com FileReference e RemoteObject com 1 ação do usuário

3 respostas
duardor

Pessoal, bom dia!

Tenho um arquivo cujos bytes são gerados por um RemoteObject.
A parte java e a chegada dos dados do arquivo estão ok mas estou tendo um problema com o FileReference e o evento de result do RemoteObject.
O código AS3 está mais ou menos assim:

//Evento do botão		
public function onClickArquivoButton ( event:MouseEvent ):void
{
      remoteObject.recuperarArquivo();
}

//Result do RemoteObject
public function recuperarArquivoResult(e:ResultEvent):void
{
      var fileReference:FileReference = new FileReference();
      fileReference.save(e.result, null);
}

Este código dá o erro que se segue:

Error: Error #2176: Certas ações, como aquelas que exigem uma janela pop-up,  podem ser invocadas com interação do usuário, por exemplo, clicar com o mouse ou pressionar um botão.
	at flash.net::FileReference/_save()
	at flash.net::FileReference/save()
	...

O que acontece é que para utilizar o FileReference é necessário que o método que utiliza-o seja invocado por uma ação do usuário e pelo que eu entendo o Flex não entende o evento de resultado do RemoteObject como sendo uma ação invocada com interação do usuário, mesmo que a chamada do RemoteObject tenha sido originada por uma ação do usuário(no caso o acionamento do botão).
Pesquisando na internet vi que o pessoal tende a carregar os bytes do arquivo assim que listam ou mostram os arquivos mas no meu caso é inviável essa opção pois o usuário deve alterar alguns dados no sistema e depois gerar o arquivo (fiquei também pensando no tráfego desnecessário de dados caso o usuário nunca venha a precisar do arquivo).
Já consegui implementar com duas ações do usuário (algo como “Preparar Arquivo” e “Salvar Arquivo”) mas gostaria de saber se há alguma maneira de fazer com apenas uma ação do usuário sem pré-carregar os dados do arquivo.

Desde já agradeço!

3 Respostas

andre.gil

duardor,

Realmente, acho que não tem como contornar isso não. Eles fizeram essa limitação recentemente no Flash Player 10 por questões de segurança. Agora, certas coisas só podem ser utilizadas a partir de uma ação do usuário, como o click de um botão. Para saber mais sobre isso veja:

http://www.adobe.com/devnet/flashplayer/articles/fplayer10_security_changes_print.html#head3
http://theflashblog.com/?p=423

[]s

duardor

André,

Obrigado pela resposta. É como eu pensava mesmo :frowning:
Interessante ver toda a raiva do pessoal nos comments de http://theflashblog.com/?p=423

andre.gil

Acho normal a revolta das pessoas, realmente foi algo que complicou as coisas. Tivemos até que criar correções em aplicativos que já estavam funcionando antes do Flash Player 10. Mas geralmente, para aumentar a segurança de algo, temos que criar restrições. Esse foi o preço a ser pago, mas faz sentido a preocupação dos engenheiros da Adobe nesse ponto.

[]s

Criado 14 de outubro de 2009
Ultima resposta 14 de out. de 2009
Respostas 3
Participantes 2