Yanıtlar:
Farklı alan adlarıyla, yöntemleri aramak veya iframe'in içerik belgesine doğrudan erişmek mümkün değildir.
Sen kullanmak zorunda çapraz belge mesajlaşma .
Örneğin üst pencerede:
myIframe.contentWindow.postMessage('hello', '*');
ve iframe'de:
window.onmessage = function(e){
if (e.data == 'hello') {
alert('It works!');
}
};
İframe'den üst pencereye mesaj gönderiyorsanız
window.top.postMessage('hello', '*')
window.onmesage = function()...
. İç window.top.postMessage('hello', '*')
file://C:/Windows/system32/whatever
bir web sayfasına bir bağlantı koyabilir ve doğrudan kullanıcının sistem klasörüne yönlendirebilirsiniz. Günümüzde tarayıcılar çoğunlukla bu tür bağlantılara yapılan tıklamaları yok sayar. Bir web sunucusu çalıştırın ve kodunuza bu şekilde erişin ve hataların kaybolduğunu göreceksiniz.
window.frames[index]
alt çerçeve ( <iframe>, <object>, <frame>
) almak için bile kullanabiliriz getElementsByTagName("iframe")[index].contentWindow
. Üst Pencere Nesnesini window.parent
window.top
Burada olmalı, çünkü 2012'den kabul edilen cevap
2018 ve modern tarayıcılarda iframe'den üst pencereye özel bir etkinlik gönderebilirsiniz.
iframe:
var data = { foo: 'bar' }
var event = new CustomEvent('myCustomEvent', { detail: data })
window.parent.document.dispatchEvent(event)
ebeveyn:
window.document.addEventListener('myCustomEvent', handleEvent, false)
function handleEvent(e) {
console.log(e.detail) // outputs: {foo: 'bar'}
}
PS: Tabii ki, aynı şekilde olayları ters yönde gönderebilirsiniz.
document.querySelector('#iframe_id').contentDocument.dispatchEvent(event)
dispatchEvent
Tüm büyük tarayıcılarda desteklendiğine dikkat edilmelidir . IE9 ilk çıktığı versiyondu, bu yüzden çoğu işletim sistemi şimdi onunla çalışıyor. Caniuse.com/#search=dispatchEvent
Bu kitaplık HTML5 postMessage ve resize + hash özellikli eski tarayıcıları destekler https://github.com/ternarylabs/porthole
Edit: Şimdi 2014 yılında, IE6 / 7 kullanımı oldukça düşük, IE8 ve her şeyden önce destek postMessage
bu yüzden şimdi sadece bunu kullanmanızı öneririz.
https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
window.top
mülkiyet neye ihtiyacınız vermek gerekir.
Örneğin
alert(top.location.href)
Ayrıca kullanabilirsiniz
postMessage(message, '*')
;
event.source.window.postMessage
Gönderene geri göndermek için kullanın .
Iframe'den
window.top.postMessage('I am Iframe', '*')
window.onmessage = (event) => {
if (event.data === 'GOT_YOU_IFRAME') {
console.log('Parent received successfully.')
}
}
Sonra ebeveynlerden geri söyleyin.
window.onmessage = (event) => {
event.source.window.postMessage('GOT_YOU_IFRAME', '*')
}