3

我网页上的第 3 方脚本创建了一个 iframe。我需要知道这个 iframe 什么时候准备好,这样我才能操作它的 DOM。

我可以想到一个 hacky 方法:反复尝试修改 iFrame 的 DOM,并在两次尝试之间进行更改时返回成功。为此,我希望有一个可以反复检查 iframe 的属性。

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

4

5 回答 5

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 在动态插入的 iframe 中

于 2010-02-17T02:06:58.067 回答
1

在父级中有一个变量:

var setToLoad = false;

用一个函数来设置它:

function SetToLoad() {
    setToLoad = true;
}

然后在子 iframe 中使用 window.opener 调用此函数

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

window.onload = CallSetToLoad;

这在 iframe 完成加载之前不会运行,如果它在同一个域中,它将允许访问开启程序。这将需要编辑一小部分第 3 方脚本。

编辑:替代解决方案

鉴于您无法编辑脚本,您可以尝试以下操作:

frames["myiframe"].onload = function()
{
    // do your stuff here
}
于 2010-02-16T01:48:12.380 回答
0

First: You probably won't be able to manipulate its dom when it loads html from other domain

And You probably are interested in DOMready. Look here: jQuery .ready in a dynamically inserted iframe

于 2010-02-16T08:06:43.523 回答
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
 }
}

阿尔卡季

于 2011-03-28T19:25:11.270 回答
0

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

于 2010-02-16T01:41:50.633 回答