创建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之类的错误也没办法判别出来。
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之类的错误也没办法判别出来。
解决方案 »
- JSF页面的跳转问题
- Hibernate中使用DB2的问题
- 问个jsp 的小问题
- ORACLE 死掉 jsp c3p0 spring timertask ORA-04030
- 使用JDBC连接Oracle数据库:出现java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 是什么意思
- 如何在点击按钮后在当前页弹出提示框?
- 高手!请写一个对系统盘的读写程序,面试题目
- 关于Resin的配置
- 请问以nt为平台的大网站,他们的web server是用的什么软件?
- 获取remoteApp发布的应用程序列表
- 求一个正则表达式
- SSH部署又出问题了。。。求高人帮助~~~·
iframe.contentWindow.document.body
iframe.contentDocument.body
window.frames[iframename].document.body
其中前两种差不多,后者比较简便,但ie不支持contentDocument,可惜。
第三种是利用frames对象来获取,注意这样获取的对象直接就是window对象。
见:http://www.w3help.org/zh-cn/causes/index.html
这个网站上有。