Como Chamar um Flex SWF de um Domínio Remoto Usando Flash (AS3)

Se você já trabalhou com Flash e Flex, pode ter encontrado o temido SecurityError ao tentar chamar um arquivo SWF de um domínio diferente. Este erro, especificamente o Erro #2119, pode se tornar um obstáculo no seu processo de desenvolvimento de aplicativos, impedindo a interação perfeita entre SWFs hospedados em diferentes domínios. Hoje, vamos abordar o problema e explorar como você pode lidar eficazmente com essa questão usando ActionScript 3 (AS3).

O Problema: Violação do Sandbox de Segurança

Imagine que você tem um Flex SWF hospedado em um domínio, digamos, http://www.a.com/a.swf, e deseja carregar um SWF diferente, http://services.nuconomy.com/n.swf, de outro domínio. Seu código pode parecer algo assim:

_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderFinish);
_loader.load(req);

No entanto, ao executar, você recebe a seguinte exceção:

SecurityError: Error #2119: Violação do sandbox de segurança: o chamador http://localhost.service:1234/flashTest/Main.swf não pode acessar LoaderInfo.applicationDomain de propriedade de http://www.b.com/b.swf.

Esse erro geralmente ocorre porque o Flash Player impõe restrições de segurança do sandbox que impedem que arquivos SWF servidos de diferentes domínios interajam diretamente.

A Solução: Concedendo Acesso com Security.allowDomain()

Para permitir o acesso cross-domain, você precisará conceder permissão explicitamente usando o método Security.allowDomain() em ActionScript. Aqui está como configurar essa solução de forma eficaz:

Etapa 1: Modifique o SWF que Você Está Tentando Carregar

No arquivo SWF que você está tentando carregar (vamos chamá-lo de http://services.nuconomy.com/n.swf), você precisará incluir o seguinte snippet de código:

import flash.system.Security;

// Permitir o domínio que irá interagir com este SWF
Security.allowDomain("http://localhost.service:1234");

Etapa 2: Implementar Security.allowDomain() de Forma Adequada

  • Múltiplos Domínios: Se sua aplicação precisar permitir acesso de diferentes domínios, você pode chamar Security.allowDomain() várias vezes para cada domínio.
  • Melhores Práticas: Tenha cuidado ao usar allowDomain() extensivamente, pois isso pode expor seu arquivo SWF a vulnerabilidades de segurança. Apenas permita domínios confiáveis.

Etapa 3: Testando sua Configuração

Depois de atualizar o código do SWF, você pode executar sua aplicação novamente. Se tudo estiver configurado corretamente, você deve conseguir carregar classes do SWF remoto sem acionar nenhuma violação de segurança.

Recursos Adicionais

Para uma compreensão mais profunda, você pode consultar a extensa documentação da Adobe sobre segurança no Flash. Confira The Adobe Flex 3 Programming ActionScript 3 PDF, particularmente o Capítulo 27, que cobre Segurança do Flash Player e Cross-scripting.

Conclusão

Encontrar violações de sandbox de segurança pode ser frustrante, especialmente quando você está tentando implementar recursos que aprimoram a funcionalidade da sua aplicação. Felizmente, com o método Security.allowDomain(), você pode contornar facilmente essas restrições e habilitar comunicação suave entre SWFs de diferentes domínios. Implemente-o cuidadosamente, assegure-se de conceder acesso apenas a domínios confiáveis e você estará no caminho para uma integração bem-sucedida.

Lembre-se, práticas de codificação seguras são essenciais para manter a integridade de suas aplicações em um ambiente conectado.