Bem, quase toda a gente já se deparou com um erro algo parecido como este:
Channel.Security.Error error Error #2048: Violation de la sécurité Sandbox.
Em inglês deverá ser algo como Sandbox Security Violation.
Isto em português mais simples e de programador: Bronca na aplicação. Por vezes não é facil encontrar referencias a este problema.
O flash player (Sandobox) está por si protegido e fechado, não permitindo ao .swf aceder a muitos recursos em outros servidores, e quando este erro acontece é porque simplesmente a nossa aplicação está a tentar aceder a outro servidor/site que não o nosso. Este erro pode até mesmo acontecer no nosso localhost quando estamos a testar qualquer coisa.. (é raro acontecer mas pode acontecer) e o mais estranho de tudo é que pode inclusive acontecer no mesmo servidor… vejam o exemplo:
Tenho um aplicativo (imaginário) em: http://www.msdevstudio.com/teste/teste.swf que tenta aceder ao gateway do amfphp em http://msdevstudio.com/amfphp/gateway.php. E dá o erro em cima… perguntam vocês, mas é o mesmo site/servidor, o porque desse erro ?
Simples, porque o endereço que eu especifiquei para o gateway.php não têm o “www.”
Estranhissimo não é ?? Se retirarem o www do link em cima http://msdevstudio.com/teste/teste.swf já funciona sem qualquer erro…
Há cada coisa estranha neste flash :p Mas eu gosto!
Uma das soluções para evitar é verificar sempre os links, mas neste caso em cima é muito comum acontecerem problemas semelhantes.
Este texto todo para explicar que existe uma forma bem facil para ultrapassar estes problemas, e que deve ser estudada porque em muitos casos vai ser necessária (incluindo do flex 4/flash 10), essa forma é um arquivo crossdomain.xml
Este arquivo é um simples .xml que enumera quem pode aceder ao servidor, ou seja, se o flash ler este ficheiro e perceber que o ficheiro permite a todos aceder ao servidor externamente, o flash simplesmente não dará qualquer erro.
Vejam um exemplo: (permite o acesso publico)
<?xml version=”1.0″?>
<cross-domain-policy>
<allow-access-from domain=”*” />
</cross-domain-policy>
ou este: (permite acesso apenas a alguns sites)
<?xml version=”1.0″?>
<cross-domain-policy>
<allow-access-from domain=”*.example.com” />
<allow-access-from domain=”www.servidorDoMeuAmigo.com” />
<allow-access-from domain=”localhost” />
</cross-domain-policy>
Um destes simples pedaços de código vai fazer com que o servidor fique disponivel para o flash aceder a ele de qualquer outro servidor (no primeiro caso), ou apenas a alguns sites (segundo caso). Um exemplo prático; seria muito mais facil se todos os grandes sites que disponibilizam muitas API’s e serviços individuais tivessem este ficheiro no seu servidor. Assim o flash simplesmente não teria qualquer problema a aceder a eles…enquanto isso não acontece continuaremos a usar uma bridge como em php ou outra linguagem server-side que permite ligar a outros servidores.
Devem seguir os seguintes passos, copiar um dos códigos em cima e guardarem-no como crossdomain.xml, e enviem-no para o vosso servidor. tipo: http://www.meuservidor.com/crossdomain.xml
No Flex, façam na vossa tag aplicação:
<mx:Application …. creationComplete=”init()”>
e coloquem este função:
private function init().void {
Security.allowDomain(”http://www.meuservidor.com“);
Security.loadPolicyFile(”http://www.meusvidor.com/crossdomain.xml“);
}
Dependendo dos casos o Security.allowDomain() poderá ser suficiente, mas o exemplo em cima será o mais indicado.
Devem ter em especial atenção questões de segurança (não que existam muitos riscos) mas por causa da possibilidade de qualquer aplicativo usar o vosso servidor abusivamente.
Espero que seja util e que acima de tudo tenha desmistificado a confusão que se encontra na net quando se procura sobre o crossdomain.xml.
Abraço.









2 Comentários
Procurei no Google e achei a solução aqui
Ved
hehehe
Funcionou?