检查iframe是否已准备好写入

时间:2010-02-15 22:59:06

标签: javascript iframe events onload

我网页上的第三方脚本会创建一个iframe。我需要知道这个iframe什么时候准备就绪,所以我可以操纵它的DOM。

我可以想到一个hacky方法:反复尝试修改iFrame的DOM,并在我们在两次尝试之间做出改变时返回成功。为了实现这一点,我更喜欢我可以反复检查iframe的属性。

是否有替代的,跨浏览器的事件方法知道iframe已准备就绪?例如。我们可以重新定义onLoad函数来调用我们的代码(但我不知道我是否可以这样做,因为我没有创建iframe)。

5 个答案:

答案 0 :(得分:2)

使用jquery?

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

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

jQuery .ready in a dynamically inserted iframe

中回答的问题

答案 1 :(得分:1)

在父母中有一个变量:

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
}

答案 2 :(得分:0)

您可以将任意脚本代码注入iframe吗?如果是这样,您应该能够在iframe加载调用父页面中的代码时使iframe中的某些代码执行。

答案 3 :(得分:0)

首先:当你从其他域

加载html时,你可能无法操纵它的dom

你可能对DOMready感兴趣。 看这里: jQuery .ready in a dynamically inserted iframe

答案 4 :(得分:0)

比拉尔,

你可以检查一个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
 }
}

阿尔卡季