iframe的兼容性问题研究

cloudgamer 2010-08-28 03:22:11
创建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函数:
if ( isie ) {
iframe.attachEvent( "onload", finish );
} else {
iframe.onload = finish;
}

在ie需要用attachEvent来绑定onload,因为在ie中直接设置onload是无效的。
除了用attachEvent还可以用onreadystatechange代替。
至于原因我也不清楚,详细参考“判断 iframe 是否加载完成的完美方法”。

iframe加载

iframe的加载还有一个问题,测试以下代码:
<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之类的错误也没办法判别出来。
...全文
686 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloudgamer 2010-09-20
  • 打赏
  • 举报
回复
WebAdvocate 2010-09-02
  • 打赏
  • 举报
回复
iframe 的兼容性还有好多。
见:http://www.w3help.org/zh-cn/causes/index.html
这个网站上有。
cloudgamer 2010-09-01
  • 打赏
  • 举报
回复
cloudgamer 2010-08-30
  • 打赏
  • 举报
回复
获取body

要从iframe中获取body,有以下几个方法:
iframe.contentWindow.document.body
iframe.contentDocument.body
window.frames[iframename].document.body
其中前两种差不多,后者比较简便,但ie不支持contentDocument,可惜。
第三种是利用frames对象来获取,注意这样获取的对象直接就是window对象。
cloudgamer 2010-08-30
  • 打赏
  • 举报
回复
呵呵
  • 打赏
  • 举报
回复
居然还能抢到沙发,真是出乎意料,话说虽是周末,却也不该这么冷清啊.脑海里一阵凉风吹过,真是应了时节"天凉好个秋啊".
  • 打赏
  • 举报
回复
打开好半天,才能回复.真耽误事.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧