El sitio web en el iframe no está ubicado en el mismo dominio , pero ambos son míos, y me gustaría comunicarme entre el iframe
y el sitio principal. ¿Es posible?
javascript
html
ajax
iframe
Danny Fox
fuente
fuente
window.onmesage = function()...
. En el iframe:window.top.postMessage('hello', '*')
file://C:/Windows/system32/whatever
una página web y hacer que apuntara directamente a la carpeta del sistema del usuario. En la actualidad, los navegadores ignoran en su mayoría los clics en enlaces como ese. Ejecute un servidor web y acceda a su código a través de él y verá que los errores desaparecen.window.frames[index]
para obtener child frame (<iframe>, <object>, <frame>
), equivalente agetElementsByTagName("iframe")[index].contentWindow
. Para obtener el objeto de la ventana principal de IFrames, es mejor usarlowindow.parent
, ya quewindow.top
representa la ventana principal más importanteDebe estar aquí, porque respuesta aceptada de 2012
En 2018 y en los navegadores modernos, puede enviar un evento personalizado desde iframe a la ventana principal.
iframe:
var data = { foo: 'bar' } var event = new CustomEvent('myCustomEvent', { detail: data }) window.parent.document.dispatchEvent(event)
padre:
window.document.addEventListener('myCustomEvent', handleEvent, false) function handleEvent(e) { console.log(e.detail) // outputs: {foo: 'bar'} }
PD: Por supuesto, puede enviar eventos en la misma dirección opuesta.
document.querySelector('#iframe_id').contentDocument.dispatchEvent(event)
fuente
dispatchEvent
es compatible con todos los principales navegadores. IE9 fue la primera versión en la que vino, por lo que la mayoría de los sistemas operativos ahora funcionan con él. caniuse.com/#search=dispatchEventEsta biblioteca es compatible con HTML5 postMessage y navegadores heredados con cambio de tamaño + hash https://github.com/ternarylabs/porthole
Editar: Ahora, en 2014, el uso de IE6 / 7 es bastante bajo, IE8 y, sobre todo, el soporte,
postMessage
por lo que ahora sugiero usarlo.https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
fuente
La
window.top
propiedad debe poder darte lo que necesitas.P.ej
Ver http://cross-browser.com/talk/inter-frame_comm.html
fuente
Úselo
event.source.window.postMessage
para enviar de vuelta al remitente.Desde Iframe
window.top.postMessage('I am Iframe', '*') window.onmessage = (event) => { if (event.data === 'GOT_YOU_IFRAME') { console.log('Parent received successfully.') } }
Luego, de los padres, responda.
window.onmessage = (event) => { event.source.window.postMessage('GOT_YOU_IFRAME', '*') }
fuente
También puedes usar
postMessage(message, '*')
;fuente