Динамически создавайте iframe и присоединяйте к нему событие onload - PullRequest
11 голосов
/ 31 мая 2011

Я создал динамический 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.
}

Ответы [ 3 ]

15 голосов
/ 31 мая 2011

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

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

Вы можете использовать таймер, чтобы проверить, завершено ли состояние readWindow фрейма

var inter = window.setInterval(function() {
    if (frame.contentWindow.document.readyState === "complete") {
      window.clearInterval(inter);
      // grab the content of the iframe here
    }
}, 100);
0 голосов
/ 30 октября 2012

Я только что попробовал это, и это работало в Chrome:

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

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

0 голосов
/ 31 мая 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...