Подождите, пока iframe загрузится в JavaScript

Я открываю iframe в JavaScript:

righttop.location = "timesheet_notes.php";

а затем хотите передать ему информацию:

righttop.document.notesform.ID_client.value = Client;

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

Итак, каков наилучший / наиболее эффективный способ решить эту проблему? Какой-то цикл тайм-аута? В идеале я бы действительно хотел, чтобы все это содержалось в этом конкретном скрипте, вместо того, чтобы добавлять какие-либо дополнительные элементы на открываемую страницу.


person Bill Dawes    schedule 23.09.2009    source источник


Ответы (3)


Прежде всего, я считаю, что вы должны влиять на свойство src окон iframe, а не на location. Во-вторых, подключите событие load iframe для выполнения ваших изменений:

var myIframe = document.getElementById('righttop');
myIframe.addEventListener("load", function() {
  this.contentWindow.document.notesform.ID_client.value = Client;
});
myIframe.src = 'timesheet_notes.php';

Опять же, все это предполагает, что вы имеете в виду i фрейм, а не фреймы.

person Crescent Fresh    schedule 23.09.2009
comment
Есть ли способ сделать это, прикрепив событие? Предположим, что у iframe могут быть собственные обработчики загрузки, и я не хочу, чтобы они случайно были сбиты с толку, переназначив свойство onload. - person Eric Nguyen; 23.09.2009
comment
@ Эрик: да. Используйте такую ​​библиотеку, как Mootools, Prototype 1.6 или jQuery. Если у вас их нет, используйте это: ejohn.org/blog/f flexible- javascript-события - person Crescent Fresh; 23.09.2009
comment
Ах ... Означает ли это, что эта функция onload в скрипте, который запускает загрузку страницы, может мешать функции onload на загруженной странице? Я думаю, пока они оба не пытаются писать в один и тот же элемент / из одного и того же элемента, все будет в порядке? - person Bill Dawes; 24.09.2009
comment
@Bill: нет, @ вопрос Эрика был о том, будет ли этот ответ мешать какому-либо атрибуту onload="...", установленному в самом элементе <iframe>. Ответ на это - да, будет. Однако любой обработчик onload, установленный внутри документа iframe, не затрагивается. - person Crescent Fresh; 24.09.2009
comment
Как ни странно, я могу заставить это работать как ‹iframe onload =›, но не с iframe.onload = function () {}. - person Alper; 27.01.2016

Я думаю, вы можете довольно легко сделать это с помощью jQuery ... jQuery Home Просто подключите страницу к jQuery $ function (). .. например

$(document).ready(function() { 
    $('iframe').load(function() { 
       // write your code here....
    });
});

Взгляните на пример загрузчика файлов здесь: Использование iframe для загрузки нескольких файлов ...

person rajesh pillai    schedule 23.09.2009
comment
Я действительно не хотел входить в jquery (еще не открыл эту дверь), я просто надеялся разобраться с этим в нескольких элегантных строках javascript. Но все равно спасибо, Раджеш! - person Bill Dawes; 24.09.2009
comment
не проблема .. спасибо за публикацию, так как мне нужно научиться нескольким трюкам без использования jquery :) - person rajesh pillai; 24.09.2009

Попробуй это...

$('iframe').each(function() { 
    $(this).ready(function() {
        $('#result').html("ready");
    });
});
person Yuda Prawira    schedule 12.09.2011
comment
В оригинальном плакате ни разу не упоминался jQuery, и в посте не было тега jQuery. Тогда я бы предположил, что они не ищут ответа jQuery. - person James Khoury; 13.09.2011