Jquery ('#iframeid'). Load () выполняется перед загрузкой Iframe CONTENT (текст, изображения) - PullRequest
2 голосов
/ 11 августа 2011

Я пытаюсь получить доступ к данным Iframe.Чтобы заставить мою функцию JavaScript ждать, я использую функцию jqueries .load.Но все же мой код JavaScript выполняется «иногда» до полной загрузки содержимого iframe.Иногда я имею в виду, что поведение для разных компьютеров разное.На более медленных компьютерах он чаще всего ожидает более быстрых компьютеров, код почти всегда выполняется.Поэтому я подозреваю, что Internet Explorer 8 запускает событие onload на ранней стадии.Есть ли какая-либо функция jquery для ожидания загрузки всех элементов iframe?

Это мой код:

function parsePeopleLink(){
try{
    //This is where I check if the wanted I frame already exists
    if(document.getElementById('isolatedWorkArea') != null) {
        if(window.frames[2] != null) {
            if(window.frames[2].name == 'isolatedWorkArea') {
                //This is where I want the following code only to be executed when the Iframe's content is fully loaded, otherwise I get an access denied error when trying to change Userlinks
                $('#isolatedWorkArea').load(function() {
                    for( var i = 0; i < window.frames.length; i++){
                        for(var j = 0; j< window.frames[i].document.frames.length; j++){
                            IframeDocument = window.frames[i].document.frames[j].document;
                            changeUserLink(findPeopleIDfix(findPeopleID(IframeDocument)),findUserLinks(IframeDocument),8, IframeDocument);
                        }
                    }
                });
            }
            else {
                throw e; //I know that all the nested else statements are ugly, I just inserted them for testing purposes
            }   
        }
        else {
            throw e;
        }
    }
    else {
        throw e;
    }
}
catch(e) {
    //alert(e.description);
    for(var k = 0; k < window.frames.length; k++)
    {
        IframeDocument = window.frames[k].document;
        changeUserLink(findPeopleIDfix(findPeopleID(IframeDocument)),findUserLinks(IframeDocument),9, IframeDocument);      
        iframeindex++;
    }
  }
}

Все Iframe имеют: одинаковый порт, protocoll и src.Помощь очень ценится

Ответы [ 5 ]

3 голосов
/ 11 августа 2011

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

Родительская страница:

function parsePeopleLink() {
    //all your current code like you have it now
}

Рамка страницы:

$(function(){
    parent.parsePeopleLink();
    //This will monitor the document being ready in the framed page 
    //and then trigger the parent's function
});
3 голосов
/ 12 декабря 2012

Я использовал нечто подобное в одном из моих проектов.Я пытался загрузить файл и показать сообщение после завершения загрузки.В моем опыте такого рода вещи не работали:

$('#myiframe').attr("src","http://example.com");
$('#myiframe').load(function() { /* do work on load */ });

Событие Load запускается сразу после записи iframe в HTML, а не когда iframe загружает все его содержимое.Но этот код сработал:

$('#myiframe').load("http://example.com", function() { /* do work on load */ });

Этот код ждал, пока мой файл загрузится, а затем сработало событие загрузки.Я думаю, что это может сработать и для вас.

1 голос
/ 10 декабря 2014

Я хотел скрыть ожидающий div, когда содержимое i-кадра полностью загружено в IE, Я буквально пробовал каждое решение, упомянутое в Stackoverflow.Com, но ни с чем не сработало, как я хотел.

Тогда у меня возникла мысль, что когда содержимое i-кадра полностью загружено, событие загрузки $ (Window) может быть запущено. И это именно то, что случилось. Итак, я написал этот небольшой сценарий и работал как по волшебству:

$(window).load(function () {
         //alert("Done window ready ");
         var lblWait = document.getElementById("lblWait");
         if (lblWait != null ) {
             lblWait.style.visibility = "false";
             document.getElementById("divWait").style.display = "none";
         }
     });

Надеюсь, это поможет.

0 голосов
/ 02 июля 2014

Я использовал этот код, чтобы убедиться, что iFrame (идентифицированный по его идентификатору) был загружен перед запуском моей функции:

$("#twitter-widget").load(myFunction);
0 голосов
/ 11 августа 2011

Как / где вы запускаете загрузку iframe? Если вы проверите эти решения шаблон:

$('#myiframe').attr('src', 'http://example.com');
$('#myiframe').load(function() { /* do work on load */ });
Сообщается, что

работает.

Аналогичные заявленные решения:

jQuery .ready в динамически вставляемом iframe
Обратный вызов Javascript после завершения загрузки IFRAME?

Edit:

Похоже, у Ника Спирса правильный ответ, или, по крайней мере, это часть вашей проблемы. Проблемы с доступом к содержимому iframe.

...