我网页上的第三方脚本会创建一个iframe。我需要知道这个iframe什么时候准备就绪,所以我可以操纵它的DOM。
我可以想到一个hacky方法:反复尝试修改iFrame的DOM,并在我们在两次尝试之间做出改变时返回成功。为了实现这一点,我更喜欢我可以反复检查iframe的属性。
是否有替代的,跨浏览器的事件方法知道iframe已准备就绪?例如。我们可以重新定义onLoad函数来调用我们的代码(但我不知道我是否可以这样做,因为我没有创建iframe)。
答案 0 :(得分:2)
使用jquery?
function callIframe(url, callback) {
$(document.body).append('<IFRAME id="myId" ...>');
$('iframe#myId').attr('src', url);
$('iframe#myId').load(function()
{
callback(this);
});
}
中回答的问题
答案 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
}
}
阿尔卡季