我网页上的第 3 方脚本创建了一个 iframe。我需要知道这个 iframe 什么时候准备好,这样我才能操作它的 DOM。
我可以想到一个 hacky 方法:反复尝试修改 iFrame 的 DOM,并在两次尝试之间进行更改时返回成功。为此,我希望有一个可以反复检查 iframe 的属性。
是否有另一种跨浏览器事件的方法来知道 iframe 已准备好?例如,我们可以重新定义 onLoad 函数来调用我们的代码(但我不知道我是否可以这样做,因为我没有创建 iframe)。
我网页上的第 3 方脚本创建了一个 iframe。我需要知道这个 iframe 什么时候准备好,这样我才能操作它的 DOM。
我可以想到一个 hacky 方法:反复尝试修改 iFrame 的 DOM,并在两次尝试之间进行更改时返回成功。为此,我希望有一个可以反复检查 iframe 的属性。
是否有另一种跨浏览器事件的方法来知道 iframe 已准备好?例如,我们可以重新定义 onLoad 函数来调用我们的代码(但我不知道我是否可以这样做,因为我没有创建 iframe)。
使用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 中
在父级中有一个变量:
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
}
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
比拉尔,
您可以检查一个 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
}
}
阿尔卡季
您可以将任意脚本代码注入您的 iframe 吗?如果是这样,您应该能够在 iframe 加载调用父页面中的代码时在 iframe 中执行一些代码。