Tutorial crossdomain.xml; Não deixe o flex complicar!

   

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.

versão pdf temporariamente indisponivel.
Deixe um comentário ou um Trackback

2 Comentários

  1. Novembro 26, 2008 às 6:32 pm | Permalink

    Procurei no Google e achei a solução aqui :D

    Ved

  2. Novembro 27, 2008 às 7:04 am | Permalink

    hehehe :) Funcionou?

Deixe um comentário

O seu email nunca será publicado ou partilhado. Campos obrigatórios estão marcados com um *

*
*