基于JS判断iframe是否加载成功的方法(多种浏览器)


Posted in Javascript onMay 13, 2016

推荐阅读:

在项目中经常要动态添加iframe,然后再对添加的iframe进行相关操作,而往往iframe还没添加完呢,后边的代码就已经执行完了,所以有些你写的东西根本没有显示出来。这时,我们就要考虑是否可以等iframe加载完后再执行后边的操作,当然,各种浏览器早就为我们考虑到啦,看下面:

ie浏览器

IE的每个elem节点都会拥有一个onreadystatechange事件,这个事件每次在elem内容发送变化的时候触发,比如内容正在载入loading会触发,内容载入完毕loaded会触发,内容载入成功complete会触发,这个函数还需要配合readyState,这是ie上每个elem都拥有的属性,用来查看每次触发时候的状态。

//先为iframe 添加一个 onreadystatechange
iframe.attachEvent("onreadystatechange", function(){
//此事件在内容没有被载入时候也会被触发,所以我们要判断状态
//有时候会比较怪异 readyState状态会跳过 complete 所以我们loaded状态也要判断
if(iframe.readyState === "complete" || iframe.readyState == "loaded"){
//代码能执行到这里说明已经载入成功完毕了
//要清除掉事件
iframe.detachEvent( "onreadystatechange", arguments.callee);
//这里是回调函数
}
});

其他浏览器(Firefox,Opera,chrome等 )

在其他非IE的浏览器上 Firefox,Opera,chrome等 iframe 都会拥有一个 onload 事件,此事件只要触发就说名内容已经加载完毕。

iframe.addEventListener( "load", function(){
//代码能执行到这里说明已经载入成功完毕了
this.removeEventListener( "load", arguments.call, false);
//这里是回调函数
}, false);

综合一下

if(iframe.attachEvent){
iframe.attachEvent("onreadystatechange", function() {
//此事件在内容没有被载入时候也会被触发,所以我们要判断状态
//有时候会比较怪异 readyState状态会跳过 complete 所以我们loaded状态也要判断
if (iframe.readyState === "complete" || iframe.readyState == "loaded") {
//代码能执行到这里说明已经载入成功完毕了
//要清除掉事件
iframe.detachEvent("onreadystatechange", arguments.callee);
//这里是回调函数
}
});
}else{
iframe.addEventListener("load", function() {
//代码能执行到这里说明已经载入成功完毕了
this.removeEventListener("load", arguments.call, false);
//这里是回调函数
}, false);
}

注意:上面的函数必须放在 iframe 被appendChild到body后,否则不会被触发

以上内容是小编给大家介绍的JS判断iframe是否加载成功的方法,希望对大家有所帮助!

Javascript 相关文章推荐
用Javascript数组处理多个字符串的连接问题
Aug 20 Javascript
location.href语句与火狐不兼容的问题
Jul 04 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
Sep 15 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
Jun 24 Javascript
JS在可编辑的div中的光标位置插入内容的方法
Nov 20 Javascript
JavaScript编程学习技巧汇总
Feb 21 Javascript
详解vue-router 路由元信息
Sep 13 Javascript
vue router下的html5 history在iis服务器上的设置方法
Oct 18 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
9种方法优化jQuery代码详解
Feb 04 jQuery
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
Jul 17 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
JS iFrame加载慢怎么解决
May 13 #Javascript
基于JS实现的笛卡尔乘积之商品发布
May 13 #Javascript
基于jQuery倒计时插件实现团购秒杀效果
May 13 #Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 #Javascript
最简单的tab切换实例代码
May 13 #Javascript
浅析创建javascript对象的方法
May 13 #Javascript
全面理解JavaScript中的闭包
May 12 #Javascript
You might like
mysql 搜索之简单应用
2007/04/27 PHP
mysql+php分页类(已测)
2008/03/31 PHP
PHP实现读取一个1G的文件大小
2013/08/24 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
2016/03/14 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
js控制CSS样式属性语法对照表
2012/12/11 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
nodejs如何获取时间戳与时间差
2016/08/03 NodeJs
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
js实现动态时钟
2020/03/12 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
基于python中__add__函数的用法
2019/11/25 Python
python多线程爬取西刺代理的示例代码
2021/01/30 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
应届生程序员求职信
2013/11/05 职场文书
中层干部竞争上岗演讲稿
2014/01/13 职场文书
党的群众路线教育实践活动先进个人材料
2014/12/24 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android