js检测iframe是否加载完成的方法


Posted in Javascript onNovember 26, 2015

本文实例讲述了js检测iframe是否加载完成的方法。分享给大家供大家参考,具体如下:

这里是继上一篇《js实现iframe框架取值的方法(兼容IE,firefox,chrome等)》的扩展应用:

应用场景:iframe个人感觉最独特的应用之一就是配合P3P协议可以实现跨域写入cookie(好象除此之外,还没找到更有效的办法),但是有时候我们不知道这个iframe页面是否执行完毕,有没有办法判断iframe里的页面是否load完成了呢?

iframe1.html:

<html>
<head>
  <title>框架内页</title>
</head>
<body>
  <div>
    <input id="txt" name="txt" type="text" value="3秒钟后这里会变成ok" />
  </div>
  <script type="text/javascript">
    setTimeout("SetValue()",3000);
    function SetValue(){
      document.getElementById("txt").value="ok";
    }
  </script>
</body>
</html>

iframe2.html:

<html>
<head>
  <title>框架内页</title>
</head>
<body>
  <div>
    <input id="txt" name="txt" type="text" value="6秒钟后这里会变成ok" />
  </div>
  <script type="text/javascript">
    setTimeout("SetValue()",6000);
    function SetValue(){
      document.getElementById("txt").value="ok";
    }
  </script>
</body>
</html>

index.html:

<html>
<head>
  <title>检测本页中的所有iframe是否加载完成</title>
  <script type="text/javascript">
//得取iframe中的某个html控件值
function getIframeControlValue(iframeId,controlId){
  var ofrm = document.getElementById(iframeId).document;
  if (ofrm==undefined)
  {
    ofrm = document.getElementById(iframeId).contentWindow.document;
    var ff = ofrm1.getElementById(controlId).value;
    return ff;
  }
  else
  {
    var ie = document.frames[iframeId].document.getElementById(controlId).value;
    return ie;
  } 
}
//检测所有的iframe是否"加载"完成
function fnLoadOk(){
  var b = true;
  for(var i=1;i<=2;i++){
    if (getIframeControlValue("frame" + i,"txt")=="ok"){
      b = b && true;
    }
    else
    {
      b = b && false;
    }
  }
  return b;
}
//设置回答显示区的值
function setValue(str){
  if (str!=null && str.length>0){
    document.getElementById("result").innerHTML = "<span style='color:red'>" + new Date().toLocaleString() + " " + str + "</span>";
  }
  else{
    document.getElementById("result").innerHTML = "<span style='color:green'>" + new Date().toLocaleString() + " 正在加载" + "</span>";
  }  
}
var _check = setInterval("t()",500);//每隔0.5秒检查一次
function t(){
  if (fnLoadOk()){
    clearInterval(_check);//加载完成后,清除定时器
    setValue("加载完成!");
  }
  else{
    setValue();
  }
}
</script>
</head>
<body>
<h3>检测本页中的iframe是否加载完成</h3>
<iframe name="frame1" id="frame1" src="iframe1.html" frameborder="1" height="60" width="180"></iframe>
<iframe name="frame2" id="frame2" src="iframe2.html" frameborder="1" height="60" width="180"></iframe>
<div id="result" style="margin:10px;">
准备就绪
</div>
</body>
</html>

值得注意的是:本文中的示例是放在按钮click事件中检测的,如果打算页面一打开就开始检测,一定要放在index.html页body的onload事件中,否则会出异常(原因是index.html尚未加载完成,这时就急着获取框架的内容,得到的是undefined或null)

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 面向对象 function类
May 13 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
Oct 25 Javascript
JavaScript中的闭包
Feb 24 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
JS实现两周内自动登录功能
Mar 23 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
基于vue中对鼠标划过事件的处理方式详解
Aug 22 Javascript
js中位运算的运用实例分析
Dec 11 Javascript
从理论角度讨论JavaScript闭包
Apr 03 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
Sep 22 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 #Javascript
深入浅析同源策略和跨域访问
Nov 26 #Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
Nov 26 #Javascript
学习JavaScript设计模式(单例模式)
Nov 26 #Javascript
javascript bom是什么及bom和dom的区别
Nov 26 #Javascript
Javascript模仿淘宝信用评价实例(附源码)
Nov 26 #Javascript
Javascript BOM学习小结(六)
Nov 26 #Javascript
You might like
用PHP将数据导入到Foxmail
2006/10/09 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP中$this和$that指针使用实例
2015/01/06 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
jquery删除数组中重复元素
2016/12/05 Javascript
理解javascript中的闭包
2017/01/11 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
Emberjs 通过 axios 下载文件的方法
2019/09/03 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
Python实现简单多线程任务队列
2016/02/27 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
jupyter notebook 多行输出实例
2020/04/09 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
入党申请书自我鉴定
2013/10/12 职场文书
3的组成教学反思
2014/04/30 职场文书
建国大业观后感800字
2015/06/01 职场文书
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
Vue ECharts实现机舱座位选择展示功能
2022/05/15 Vue.js