iframe的兼容性问题研究
时间:2010-08-28
来源:互联网
创建iframe
由于ie中iframe的name不能修改的问题,要这样创建iframe:
var iframe = document.createElement( isie ? "<iframe name=\"" + iframename + "\">" : "iframe");
iframe.name = iframename;
ps:关于iframe的name的问题参考这里的iframe部分。
ie8已经可以修改name了,但在非标准(怪辟)模式下还是不能修改。
iframe加载判断
在iframe的onload中执行_finish函数:
Assembly code
在ie需要用attachEvent来绑定onload,因为在ie中直接设置onload是无效的。
除了用attachEvent还可以用onreadystatechange代替。
至于原因我也不清楚,详细参考“判断 iframe 是否加载完成的完美方法”。
iframe加载
iframe的加载还有一个问题,测试以下代码:
Assembly code
结果safari, chrome都会触发onload两次,而opera, ff和ie(请自行兼容)都是1次。
估计safari和chrome在appendChild之后就进行第一次加载,并且在设置src之前加载完毕,所以触发了两次。
如果在插入body之前给iframe随便设置一个src(除了空值),间接加长第一次加载,那么也只触发一次了。
ps:不设置或空值的src相当于链接到“about:blank”(空白页)。
那么opera, ff和ie可能是第一次加载太慢,第二次覆盖了第一次的,所以只触发了一次onload。
也可能是其他原因,例如浏览器优化之类的,我也不确定。
ff的问题
ff的onload还有一个问题,在出现ERROR_INTERNET_CONNECTION_RESET(文件大小超过服务器限制)之类的服务器错误时,即使加载完成也不会触发onload,暂时找不到解决办法。
iframe有一个缺陷是只能用onload判断加载完成,但没有办法判断是否加载成功。
没有类似XMLHTTP的status的东西,遇上404之类的错误也没办法判别出来。
由于ie中iframe的name不能修改的问题,要这样创建iframe:
var iframe = document.createElement( isie ? "<iframe name=\"" + iframename + "\">" : "iframe");
iframe.name = iframename;
ps:关于iframe的name的问题参考这里的iframe部分。
ie8已经可以修改name了,但在非标准(怪辟)模式下还是不能修改。
iframe加载判断
在iframe的onload中执行_finish函数:
Assembly code
if ( isie ) { iframe.attachEvent( "onload", finish ); } else { iframe.onload = finish; }
在ie需要用attachEvent来绑定onload,因为在ie中直接设置onload是无效的。
除了用attachEvent还可以用onreadystatechange代替。
至于原因我也不清楚,详细参考“判断 iframe 是否加载完成的完美方法”。
iframe加载
iframe的加载还有一个问题,测试以下代码:
Assembly code
<body><div id="msg">状态:</div></body> <script> var msg = document.getElementById("msg"); var iframe = document.createElement("iframe"); iframe.onload = function(){ msg.innerHTML += "onload,"; } document.body.appendChild(iframe); iframe.src = "http://cloudgamer.cnblogs.com/" </script>
结果safari, chrome都会触发onload两次,而opera, ff和ie(请自行兼容)都是1次。
估计safari和chrome在appendChild之后就进行第一次加载,并且在设置src之前加载完毕,所以触发了两次。
如果在插入body之前给iframe随便设置一个src(除了空值),间接加长第一次加载,那么也只触发一次了。
ps:不设置或空值的src相当于链接到“about:blank”(空白页)。
那么opera, ff和ie可能是第一次加载太慢,第二次覆盖了第一次的,所以只触发了一次onload。
也可能是其他原因,例如浏览器优化之类的,我也不确定。
ff的问题
ff的onload还有一个问题,在出现ERROR_INTERNET_CONNECTION_RESET(文件大小超过服务器限制)之类的服务器错误时,即使加载完成也不会触发onload,暂时找不到解决办法。
iframe有一个缺陷是只能用onload判断加载完成,但没有办法判断是否加载成功。
没有类似XMLHTTP的status的东西,遇上404之类的错误也没办法判别出来。
作者: cloudgamer 发布时间: 2010-08-28
打开好半天,才能回复.真耽误事.
作者: theforever 发布时间: 2010-08-28
居然还能抢到沙发,真是出乎意料,话说虽是周末,却也不该这么冷清啊.脑海里一阵凉风吹过,真是应了时节"天凉好个秋啊".
作者: theforever 发布时间: 2010-08-28
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28