基于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 相关文章推荐
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
基于jquery实现无限级树形菜单
Mar 22 Javascript
js中string和number类型互转换技巧(分享)
Nov 28 Javascript
js判断iframe中元素是否存在的实现代码
Dec 24 Javascript
网页中右键功能的实现方法之contextMenu的使用
Feb 20 Javascript
Vue实现双向数据绑定
May 03 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
基于jquery的on和click的区别详解
Jan 15 jQuery
vue 移动端记录页面浏览位置的方法
Mar 11 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 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
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
解析centos中Apache、php、mysql 默认安装路径
2013/06/25 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
PHP PDOStatement::setFetchMode讲解
2019/02/03 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
vue图片加载与显示默认图片实例代码
2017/03/16 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
Python 用户登录验证的小例子
2013/03/06 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
简单介绍利用TK在Python下进行GUI编程的教程
2015/04/13 Python
什么是Python中的顺序表
2020/06/02 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
经典c++面试题六
2012/01/18 面试题
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
abstract是什么意思
2012/02/12 面试题
市级绿色学校申报材料
2014/08/25 职场文书
计生个人工作总结
2015/02/28 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书