Carregando XML domínio cruzado com JavaScript usando a / xsl / jsonp conceito híbrido iframe-proxy?

StackOverflow https://stackoverflow.com/questions/1875379

Pergunta

Em nosso site www.foo.com queremos para download e uso http://feeds.foo.com/feed.xml com Javascript. Nós vamos obviamente usar Access-Control mas para navegadores que não suportam-lo estamos considerando o seguinte como um retorno:

Em www.foo.com , nós set document.domain, fornecer uma função de retorno de chamada e carregar a alimentação em um iframe (oculto):

document.domain = 'foo.com';
function receive_data(data) {
 // process data
};

var proxy = document.createElement('iframe');
proxy.src = 'http://feeds.foo.com/feed.xml';
document.body.appendChild(proxy);

Em feeds.foo.com , adicione um XSL para feed.xml e usá-lo para transformar a alimentação em um documento HTML que também define document.domain e chama a função de retorno de chamada em seu pai com os dados da alimentação como JSON:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:template match="ROOT">
  <html><body>
   <script type="text/javascript">
    document.domain = 'foo.com';
    parent.receive_data([<xsl:apply-templates/>]);
   </script>
  </body></html>
 </xsl:template>
 <!-- templates that transform data into json objects go here -->
</xsl:stylesheet>

Existe uma maneira melhor de XML carga de feeds.foo.com e quais são as ramificações desta iframe-proxy / XSLT / jsonp truque? (..E em que casos ele irá falhar?)


Observações

  • Este não funciona no Safari e Chrome, mas uma vez que ambos apoio Access-Control Está tudo bem.
  • Queremos pouca ou nenhuma mudança para feeds.foo.com
  • Estamos cientes de (mas não está interessado em) soluções de proxy do lado do servidor
  • actualização: escreveu sobre ele
Foi útil?

Solução

Se você tem controle sobre ambos os domínios, você pode tentar uma biblioteca de script cross-domain como EasyXDM , que envolve peculiaridades cross-browser e fornece uma API-to fácil de usar para se comunicar em script de cliente entre diferentes domínios usando o melhor mecanismo disponível para esse navegador (por exemplo, postMessage se possível, outros mecanismos se não).

Aviso: você precisa ter controle sobre ambos os domínios, a fim de torná-lo trabalho (onde os meios "controlar" você pode colocar arquivos estáticos em ambos). Mas você não precisa de quaisquer alterações no código do lado do servidor.

Outra ressalva: existem implicações de segurança aqui-- certificar-se de que você confia roteiro do outro domínio

!

Outras dicas

Você pode usar APIs do Yahoo ( YQL ) .. Basta especificar url, formato e callback

É uma espécie de solução do lado do servidor, no entanto, não no seu servidor:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top