Динамически создавать iframe и присоединять к нему событие onload

Я создал динамическую структуру iframe и добавил к ней атрибут src. Затем я добавил этот iframe в тело страницы. Знаю, что хочу привязать событие onload к iframe для чтения содержимого iframe. Может кто-нибудь предложить, как я это делаю.

frame = document.createElement('iframe');
frame.setAttribute('src','http://myurl.com');
body.appendChild(frame);
frame.onload = function(){
    alert('hi'); // here i want to read the content in the frame.
}

Ответ 1

В некоторых браузерах есть событие onload для iframe, сначала вы должны попытаться подключить его перед установкой атрибута iframe src.

Я бы вообще не использовал его, поскольку в некоторых браузерах он может не срабатывать при определенных условиях (например, цель была в кеше в IE).

Пользователь может установить таймер, чтобы проверить, завершено ли полнотекстовое содержимое contentWindow

var inter = window.setInterval(function() {
    if (frame.contentWindow.document.readyState === "complete") {
      window.clearInterval(inter);
      // grab the content of the iframe here
    }
}, 100);

Ответ 2

Я просто попробовал это, и он работал в Chrome:

var iframe = document.createElement('iframe');
// append iframe to DOM however you like then:
iframe.contentWindow.parent.location.href // properly gives parent window href.

W3school говорит, что contentWindow поддерживается во всех основных браузерах.

Ответ 3

Я сомневаюсь, что вы можете прикрепить событие onload к iframe. Он не будет работать во всех браузерах. С другой стороны, вы можете проверить, был ли iframe загружен:

window.onload=function()
{
var iframe=document.getElementById('myframe');
if(iframe) 
    alert('The iframe has just been loaded.');
}

Или используйте AJAX для загрузки содержимого в вашем контейнере. С помощью AJAX вы можете установить правильное событие завершения загрузки.