Pregunta

En nuestro sitio www.foo.com queremos descargar y utilizar http://feeds.foo.com/feed.xml con Javascript. Obviamente vamos a utilizar Access-Control pero para los navegadores que lo soportan estamos considerando lo siguiente como punto de retorno:

En www.foo.com , fijamos document.domain, proporcionar una función de devolución de llamada y cargar la alimentación en un 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);

En feeds.foo.com , añadir un XSL a feed.xml y utilizarla para transformar el alimento en un documento HTML que también establece document.domain y llama a la función de devolución de llamada en su padre con los datos del canal 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>

¿Hay una mejor manera de cargar XML desde feeds.foo.com y cuáles son las consecuencias de este truco / XSLT / iframe jsonp-proxy? (..Y en qué casos va a fracasar?)


Observaciones

  • Esto no funciona en Safari y Chrome, pero ya que tanto el apoyo Access-Control está bien.
  • Queremos poco o ningún cambio a feeds.foo.com
  • Somos conscientes de (pero no está interesado en) soluciones proxy del lado del servidor
  • Actualización: escribió sobre él
¿Fue útil?

Solución

Si usted tiene control sobre ambos dominios, puede probar una biblioteca de secuencias de comandos entre dominios como EasyXDM , que envuelve peculiaridades transversal del navegador y proporciona una API fácil de usar para la comunicación en el script de cliente entre diferentes dominios usando el mejor mecanismo disponible para que el navegador (por ejemplo, postMessage si es posible, otros mecanismos si no).

Advertencia: se necesita tener el control sobre ambos dominios con el fin de hacer que funcione (donde el "control" significa que puede colocar los archivos estáticos en ambos). Pero no es necesario ningún cambio de código del lado del servidor.

Otra advertencia: hay implicaciones de seguridad aquí-- Asegúrese de confiar en el guión de otro dominio

!

Otros consejos

Puede utilizar las API de Yahoo ( YQL ) .. Sólo especifique el URL, el formato y la devolución de llamada

Es una especie de solución de servidor, sin embargo, no en su servidor:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top