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/whateverbir 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.parentwindow.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)
dispatchEventTü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 postMessagebu yüzden şimdi sadece bunu kullanmanızı öneririz.
https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
window.topmülkiyet neye ihtiyacınız vermek gerekir.
Örneğin
alert(top.location.href)
Ayrıca kullanabilirsiniz
postMessage(message, '*');
event.source.window.postMessageGö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', '*')
}