Como fazer comunicação de domínio cruzado entre JavaScript e Flash?
-
19-08-2019 - |
Pergunta
Como faço para abrir 'segurança cross-domain', de modo que o JavaScript na página livremente possa comunicar com o SWF, mesmo quando este está hospedado em outro domínio?
Eu tenho certeza que esta comunicação função é bloqueada por padrão, mas brincando com um arquivo chamado "crossdomain.xml" ea função do ActionScript 3: System.security.allowDomain ( "*"). Eu não estou tendo sucesso completo embora, e eu não tenho o discernimento para saber qual é a abertura para o que.
Há outras camadas de segurança escondidas, que eu preciso de pensar nesse cenário?
E estou abrindo meu código para potenciais hackers de alguma forma, fazendo esta instalação?
(e caso você esteja se perguntando: Sim, eu Have para fazer este trabalho em um cenário, onde o html está hospedado em um domínio, o JavaScript é adicionado externamente a partir de outro domínio eo SWF é incorporado pelo JavaScript de um terceiro domínio - não pergunte por que, é muito complicado para explicar. - Eu também gostaria de poder sediar a coisa toda em um domínio)
Solução
Usando Security.allowDomain("www.example.com")
no SWF permitirá JS em uma página de www.example.com para funções de chamada expostos no SWF com ExternalInterface.addCallback()
. O domínio e subdomínio deve corresponder exatamente. Usando "*"
permitirá que qualquer domínio para se comunicar com o SWF, mas se você tiver um domínio específico, é melhor usá-lo.
Configuração allowScriptAccess
para always
no HTML incorporar código permitirá que o SWF para chamar funções JavaScript.
Uma coisa que chama muitos desenvolvedores é que o JavaScript não será capaz de chamar funções no SWF até que o SWF é feito o carregamento. Infelizmente, não há nenhum evento baseado em JS que lhe diz quando o SWF está pronto (pelo menos que eu encontrei). O que eu costumo fazer para contornar este problema é chamar uma função JS do SWF imediatamente quando o SWF terminar de carregar a notificar a página que o SWF está pronto.
Há alguma abstração aqui e ali, mas se você der uma olhada no código fonte para YUI Gráficos , você pode ser capaz de descobrir como Yahoo! tem crossdomain comunicação de trabalho JS / SWF.
Outras dicas
Uma coisa que eu gostaria de acrescentar que a resposta anterior: Se você tentar o código acima e ele não funcionar, verifique se o endereço do seu site inclui o "www" ou não. O meu não fez e não funcionou se eu escrevi-o como
Security.allowDomain("www.jeremy-knight.com");
Eu precisava escrevê-lo como:
Security.allowDomain("jeremy-knight.com");