一般来说,我们判断 iframe 是否加载完成其实与 判断 JavaScript 文件是否加载完成 采用的方法很类似:
var iframe = document.createElement("iframe");
iframe.src = "http://www.planabc.net";
if (!/*@cc_on!@*/0) { //if not IE
iframe.onload = function(){
alert("Local iframe is now loaded.");
};
} else {
iframe.onreadystatechange = function(){
if (iframe.readyState == "complete"){
alert("Local iframe is now loaded.");
}
};
}
document.body.appendChild(iframe);
最近, Nicholas C. Zakas 文章《Iframes, onload, and document.domain》的评论中 Christopher 提供了一个新的判断方法(很完美):
var iframe = document.createElement("iframe");
iframe.src = "http://www.planabc.net";
if (iframe.attachEvent){
iframe.attachEvent("onload", function(){
alert("Local iframe is now loaded.");
});
} else {
iframe.onload = function(){
alert("Local iframe is now loaded.");
};
}
document.body.appendChild(iframe);
几点补充说明:
- IE 支持 iframe 的 onload 事件,不过是隐形的,需要通过 attachEvent 来注册。
- 第二种方法比第一种方法更完美,因为 readystatechange 事件相对于 load 事件有一些潜在的问题。
witter:
共有29 条评论
IE 支持 iframe 的 onload 事件,不过是隐形的,需要通过 attachEvent 来注册。
受教
在ff的oninput也是不能直接dom.oninput不知为什么呢
good!!
这篇文章好, 我就觉得你应该多写点文章, 让咱也多学点, 更新频率忒低了!
请教下 /*@cc_on!@*/0 什么意思。
@thinker_creator 呵呵,精力有限,只能做到每月的更新。
@vapour 仅仅是一个判断浏览器的hack,看的时候知道就行,可以过滤。
技术就那么多,写来写去的……
怿飞 每月更新 已经很强了,总是能发现新东西……
readystatechange 事件相对于 load 事件有一些潜在的问题: 想详细了解一下都有哪些潜在问题
iframe 不提倡用啊。。。
过了阵时间我都要过来看看,都能学到不少东西,支持!
不错的内容
看了一下,学的东西还真的不少
这个挺实用~
很好很实用,我也是学习者,有时间会来看。
今天又来学习了,拜读佳作!
原来ie里iframe能通过attachEvent注册onload事件,受教了。
学习了~
我想问下,能不能获取iframe装载的那个页面的高度,继而来调整iframe所在的页面的高度?另外想问下所谓的跨域问题?比如我从一个JSP页面里用iframe加载了另外一个服务器上的html也没?但是我写的JS没有执行?
好地方,常来学习下。。。
第二种方法比第一种方法更完美,因为 readystatechange 事件相对于 load 事件有一些潜在的问题。
到底是什么问题呢
没说清楚啊
简便无刷新文件上传系统…
之前写过一个仿163网盘无刷新多文件上传系统,已经对无刷新上传文件的原理做了详细的分析。
而这次的系统主要是针对单个file控件的,便携版,使用更简单,还有更深入的分析。
ps:flash实现的效……
[...] 姑且算是牛D吧 =.=!牛C:iframe.onload关于 onload 这点大家可以参考怿飞师父的文章:判断 iframe 是否加载完成的完美方法,在此纯引用一次代码: [...]
最后的说明很重要。我真的不知道ie得用attachEvent来处理ifarame的onload。。长知识了。
[...] 关于 onload 这点大家可以参考怿飞师父的文章:判断 iframe 是否加载完成的完美方法,在此纯引用一次代码: [...]
关于 commons上传图片怎么弄
[...] 为了能在文件上传完成后执行回调函数,会在iframe的onload中执行_finish函数:var finish = this._fFINISH = $$F.bind(this._finish, this);if ( $$B.ie ) { iframe.attachEvent( "onload", finish );} else { iframe.onload = $$B.opera ? function(){ this.onload = finish; } : finish;}在ie需要用attachEvent来绑定onload,因为在ie中直接设置onload是无效的。除了用attachEvent还可以用onreadystatechange代替。至于原因我也不清楚,详细参考“判断 iframe 是否加载完成的完美方法”。 [...]
IE下直接“note.onload = function(){}”也可以注册的,难道这样促发的时间不准确?
我拿后来那段代码发现有问题,还是用readystatechange比较好吧
因为用onload的话,iframe里调用的页面如果存在jscript错误,就失去作用了,原因不知道,但效果是如此。而用readystatechange就没有这个问题