Проверка, готов ли iframe для записи в - PullRequest
3 голосов
/ 16 февраля 2010

Сторонний скрипт на моей веб-странице создает iframe. Мне нужно знать, когда этот iframe готов, чтобы я мог манипулировать его DOM.

Я могу подумать о хакерском подходе: неоднократно пытаться изменить DOM iFrame и возвращать успех, когда изменение, которое мы делаем, застревает между двумя попытками. Чтобы это работало, я бы предпочел свойство, которое я могу проверять в iframe несколько раз.

Существует ли альтернативный кросс-браузерный четный подход к пониманию того, что iframe готов? Например. Можем ли мы переопределить функцию onLoad для вызова в нашем коде (но я не знаю, смогу ли я это сделать, поскольку я не создал iframe).

Ответы [ 5 ]

2 голосов
/ 17 февраля 2010

с использованием jquery?

function callIframe(url, callback) {
    $(document.body).append('<IFRAME id="myId" ...>');
    $('iframe#myId').attr('src', url);

    $('iframe#myId').load(function() 
    {
        callback(this);
    });
}

На вопрос ответили jQuery .ready в динамически вставляемом iframe

1 голос
/ 16 февраля 2010

В родительской переменной есть переменная:

var setToLoad = false;

Используйте функцию для установки:

function SetToLoad() {
    setToLoad = true;
}

Затем в дочернем iframe вызовите эту функцию с помощью window.opener

function CallSetToLoad() {
    window.opener.SetToLoad();
}

window.onload = CallSetToLoad;

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

РЕДАКТИРОВАТЬ: Альтернативное решение

Учитывая, что вы не можете редактировать скрипт, вы можете попробовать что-то вроде:

frames["myiframe"].onload = function()
{
    // do your stuff here
}
0 голосов
/ 28 марта 2011

Билал,

Есть свойство document.readyState, которое вы можете проверить (работает в IE).

foo(){
 if([your iframe id].document.readyState != "complete")
 {
   setTimeout("foo()", 500); //wait 500 ms then call foo
 }
 else
 {
   //iframe doc is ready
 }
}

Аркадий

0 голосов
/ 16 февраля 2010

Во-первых: вы, вероятно, не сможете манипулировать его dom, когда он загружает html из другого домена

И вы, вероятно, заинтересованы в DOMready.Смотрите здесь: jQuery .ready в динамически вставленном iframe

0 голосов
/ 16 февраля 2010

Можете ли вы добавить произвольный код сценария в свой iframe? Если это так, вы должны быть в состоянии сделать так, чтобы некоторый код выполнялся в iframe при загрузке iframe, вызывающей код на родительской странице.

...