Como se mencionó David Dorward, JSON-P es el más simple y rápido; sin embargo, hay otro truco, específicamente el uso de dos iframes.
Dos solucionan este problema sin utilizar JSONP, puede hacer lo siguiente. Esta técnica asume que tienes algún tipo de acceso de desarrollo a la página principal.
Hay tres páginas en dos dominios/sitios.
- página padre
- página de contenido
- página de la comunicación entre dominios (también conocido como "xdcomm")
Páginas de las páginas de los padres y xdcomm están alojados en el mismo dominio, la página de contenido es alojado en cualquier otro dominio. La página de contenido está incrustada como un iframe en la página principal y la página xdcomm está incrustada como un iframe oculto en la página de contenido.
La página xdcomm contiene un script muy simple que detecta parámetros GET en la cadena de consulta, análisis sintáctico de esa cadena de method
y args
variables (donde args
es un JSON cadena codificada), y luego ejecuta el método especificado con los argumentos especificados en la página principal. Un ejemplo puede ser seen here (ver fuente).
Aunque la misma política de JavaScript de JavaScript restringe el código en un dominio al acceder al de otro, no importa si los dominios están anidados entre sí (dominio A, anidado dentro del dominio B, anidado dentro del dominio A).
Por lo tanto, en pocas palabras, la página de contenido envía mensajes a la página principal a través de la página xdcomm cambiando el origen del iframe a algo como http://domaina.com/xdcomm.html?src=foo&args=[1,2,3,4]
. Esto sería equivalente a ejecutar foo(1,2,3,4)
en la página principal.
Además, sepa que ya hay bibliotecas que lo ayudan con esto, como easyxdm. Lo que he explicado aquí es la base de una de las técnicas que utilizan, y si bien puede no ser tan elegante, sin duda es una implementación totalmente funcional y ligera.
¿Qué navegador (s)? ¿Cómo exactamente trataste esto? Código postal? – bmargulies
¡Esta pregunta es probablemente la pregunta más frecuente aquí! Una búsqueda habría planteado * numerosas * respuestas. Necesita control sobre las secuencias de comandos y las páginas en ambos dominios (si no puede editar el contenido en ambos dominios, no podrá hacerlo), y necesita utilizar un marco como http: // easyxdm .net o busque "comunicaciones de mensajes entre dominios".La especificación de HTML5 tiene un método 'postMessage', pero si confía únicamente en esto, no funcionará en la mayoría de los navegadores, por lo que tendría que recurrir a un método de" pirateo "anterior: ¿por qué no dejar que un framework tome cuidado de esto para ti? – Graza
[JSON-P] (http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html) es la solución más simple, y la única (AFAIK) que no requiere complementos de navegador (como Flash). Esto requiere la cooperación de cualquiera que ejecute el sitio de origen diferente. – Quentin