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 相关文章推荐
jquery提升性能最佳实践小结
Dec 06 Javascript
HTTP 304错误的详细讲解
Nov 13 Javascript
javascript:void(0)的问题使用探讨
Apr 10 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
javascript圆盘抽奖程序实现原理和完整代码例子
Jun 03 Javascript
node.js中的fs.link方法使用说明
Dec 15 Javascript
浅谈angular懒加载的一些坑
Aug 20 Javascript
angularjs $http实现form表单提交示例
Jun 09 Javascript
微信小程序用户自定义模版用法实例分析
Nov 28 Javascript
Vue使用watch监听一个对象中的属性的实现方法
May 10 Javascript
JS实现纵向轮播图(初级版)
Jan 18 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
May 12 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
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
如何在PHP中使用数组
2020/06/09 PHP
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
python实现二维插值的三维显示
2018/12/17 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
2019/11/16 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
python求前n个阶乘的和实例
2020/04/02 Python
python raise的基本使用
2020/09/10 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
学生爱国演讲稿
2014/01/14 职场文书
组织关系转移介绍信
2014/01/16 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
全国道德模范事迹
2014/02/01 职场文书
土木工程专业推荐信
2014/02/19 职场文书
给上级领导的感谢信
2015/01/22 职场文书
教师年终个人总结
2015/02/11 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript