等待iframe加载JavaScript

时间:2009-09-23 01:50:08

标签: javascript dom iframe javascript-events

我在JavaScript中打开iframe:

righttop.location = "timesheet_notes.php";

然后想要传递信息:

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

显然,在页面完全加载到iframe之前,该行不会起作用,并且该表单元素将被写入。

那么,解决这个问题的最佳/最有效方法是什么?某种超时循环?理想情况下,我真的希望将它全部保存在这个特定的脚本中,而不是必须向正在打开的页面添加任何额外的东西。

4 个答案:

答案 0 :(得分:52)

首先,我认为你应该影响iframe的src属性,而不是location。其次,挂钩iframe的load事件来执行更改:

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

同样,这都是假设你的意思是 i 框架,而不是框架集。

答案 1 :(得分:5)

我想你可以用jQuery轻松做到这一点...... jQuery Home 只需将页面挂钩到jQuery $ function () ...例如

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

快速浏览文件上传器示例: Using iframes for multiple file uploads...

答案 2 :(得分:0)

尝试这个...

$('iframe').each(function() { 
    $(this).ready(function() {
        $('#result').html("ready");
    });
});

答案 3 :(得分:0)

iFrame 可以有动态加载的元素,使用它们的最佳选择是使用递归:

 $('iframe').ready(function() {
   var triggerMeAgainIfNeeded = function() {
      setTimeout(function() {
          var neededElm = $('.someElementThatLoadedAfterIframe');
           if (neededElm.length > 0) {
             // do your job
           } else {
             triggerMeAgainIfNeeded();
           }
       }, 10);
   }
});