javascript - Secuencias de comandos entre sitios en el mismo dominio, diferentes subdominios
Tengo un iframe que estoy usando para cargar contenido alojado por un proveedor externo en nuestro sitio web. Estamos tratando de determinar la altura de ese contenido para ajustar la altura del iframe, pero estoy recibiendo errores de secuencias de comandos entre sitios. No sabía que los subdominios cuentan como un sitio cruzado. ¿Hay alguna manera de evitar esto sin tener que mantenerlos en subdominios que coincidan?
Como referencia, nuestro marketing semanal es alojado por un proveedor externo en Flash, pero con el subdominio podemos redirigirlos a ellos mientras mantenemos al usuario en nuestros dominios por motivos de cookies.
Respuesta #1
Desde uno de tus subdominios, puedes (con algunas excepciones) configurar el dominio para permitir un acceso más amplio a otros subdominios en el mismo dominio principal.
Echa un vistazo a esta página: http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/
Respuesta #2
También echa un vistazo a la mensajería entre ventanas
Esta primera página es la remitente: está llamando a postMessage (enviando el mensaje de texto) y también contiene el iframe dentro del cual se encuentra la ventana receptora.
<iframe src="http://dev.jquery.com/~john/message/" id="iframe"></iframe>
<form id="form">
<input type="text" id="msg" value="Message to send"/>
<input type="submit"/>
</form>
<script>
window.onload = function(){
var win = document.getElementById("iframe").contentWindow;
document.getElementById("form").onsubmit = function(e){
win.postMessage( document.getElementById("msg").value );
e.preventDefault();
};
};
</script>
La página siguiente es el receptor: tiene un detector de eventos vinculado que observa los mensajes que se le envían e los inyecta en el DOM.
<b>This iframe is located on dev.jquery.com</b>
<div id="test">Send me a message!</div>
<script>
document.addEventListener("message", function(e){
document.getElementById("test").textContent =
e.domain + " said: " + e.data;
}, false);
</script>
