基于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 相关文章推荐
List Installed Hot Fixes
Jun 12 Javascript
JavaScript 学习笔记(九)call和apply方法
Jan 11 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
Feb 25 Javascript
js中单引号与双引号冲突问题解决方法
Oct 04 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
Oct 10 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
浅谈JavaScript作用域和闭包
Sep 18 Javascript
快速解决brew安装特定版本flow的问题
May 17 Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
May 23 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
Jan 11 jQuery
JS如何生成动态列表
Sep 22 Javascript
解决vue数据不实时更新的问题(数据更改了,但数据不实时更新)
Oct 27 Javascript
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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP操作文件方法问答
2007/03/16 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
jQuery之end()和pushStack()使用介绍
2012/02/07 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
2018/09/29 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
微信小程序常用简易小函数总结
2019/02/01 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
python多进程下实现日志记录按时间分割
2019/07/22 Python
HTML的form表单和django的form表单
2019/07/25 Python
使用python实现画AR模型时序图
2019/11/20 Python
Python PyInstaller安装和使用教程详解
2020/01/08 Python
Python实现括号匹配方法详解
2020/02/10 Python
pycharm第三方库安装失败的问题及解决经验分享
2020/05/09 Python
学校经典推荐信
2013/10/30 职场文书
大学四年职业生涯规划书范文
2014/01/02 职场文书
单位介绍信范文
2014/01/18 职场文书
幼儿园运动会加油词
2014/02/14 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
幼儿园小班评语大全
2014/04/17 职场文书
企业年检委托书范本
2014/10/14 职场文书
税务会计岗位职责
2015/04/02 职场文书
小学运动会通讯稿
2015/07/18 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python