2012-02-22 35 views
29

Por ejemplo, tengo un sitio llamado example.com en el que iframe está incrustado del dominio iframe.net, ahora quiero leer el contenido de iframe y pasar algún parámetro para mostrar un mensaje de texto. Me gusta Hola con nombre de usuario.Emisión de iframe de dominio cruzado

Ahora el problema es que esto no poder capaz de hacer la conexión entre los dos, ni siquiera soy capaz de obtener el innerHTML del marco flotante que utilicé siguiente enfoque

document.getElementById('myframe').contentWindow.document.body.innerHTML; 

Se lanza error "Permiso denegado acceder a la propiedad"

no alguien sabe cómo leer y escribir en la plataforma de dominios

+0

Usted puede utilizar easyxdm biblioteca para la comunicación entre dominios cruzados. Aquí hay un enlace por favor pago. Utilicé esta técnica para cambiar el tamaño del iframe (ancho, alto) en dominios cruzados. No estoy seguro de si esta biblioteca funciona con su escenario. Darle una oportunidad. http://easyxdm.net/wp/ –

Respuesta

37

Si usted no tiene control sobre el sitio enmarcado, no se puede eludir la política de varios dominios.

Si tiene control sobre ambos sitios, puede usar el método postMessage para transferir datos a través de diferentes dominios. Un ejemplo muy básico:

// framed.htm: 
window.onmessage = function(event) { 
    event.source.postMessage(document.body.innerHTML, event.origin); 
}; 

// Main page: 
window.onmessage = function(event) { 
    alert(event.data); 
}; 

// Trigger: 
// <iframe id="myframe" src="framed.htm"></iframe> 
document.getElementById('myframe').contentWindow.postMessage('','*'); 
+1

¿Hay algún truco de dominio cruzado reverso para hacerlo realidad –

+1

@KunalVashist Depende de su aplicación (se necesitan más detalles). También eche un vistazo a esta pregunta [Formas de eludir la política del mismo origen] (http://stackoverflow.com/questions/3076414/ways-to-circumvent-the-same-origin-policy). –

+0

Thx @rob este es bueno, pero finalmente no tengo acceso al contenido del marco –

2

En Internet Explorer 8 evento pasado como parámetro puede ser nula, es por eso que necesita para acceder al evento de una manera diferente:

En marco .html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    evt.source.postMessage('Message from iFrame', evt.origin); 
}; 

En principal.html:

window.onmessage = function(event) { 
    var evt = evt || window.event; 
    alert(evt.data); 
}; 

el evento se activa la misma manera que Rob W ha presentado:

document.getElementById('frameId').contentWindow.postMessage('message','*'); 
Cuestiones relacionadas