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 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
细品javascript 寻址,闭包,对象模型和相关问题
Apr 27 Javascript
js跨域和ajax 跨域问题的实现思路
Sep 05 Javascript
jquery 最简单易用的表单验证插件
Feb 27 Javascript
Javascript 类、命名空间、代码组织代码
Jul 31 Javascript
利用cookie记住背景颜色示例代码
Nov 04 Javascript
判断iframe里的页面是否加载完成
Jun 06 Javascript
jquery实现全选、不选、反选的两种方法
Sep 06 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
Vue 递归多级菜单的实例代码
May 05 Javascript
深入了解响应式React Native Echarts组件
May 29 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正则校验用户名介绍
2008/07/19 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
Extjs grid panel自带滚动条失效的解决方法
2014/09/11 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
如何使用Bootstrap 按钮实例详解
2017/03/29 Javascript
VUE中的无限循环代码解析
2017/09/22 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
2019/03/06 Javascript
vue+elementUI实现表格关键字筛选高亮
2020/10/26 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
浅谈Pycharm调用同级目录下的py脚本bug
2018/12/03 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python中常见的数制转换有哪些
2020/05/27 Python
python3.9.1环境安装的方法(图文)
2021/02/02 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
Mountain Hardwear官网:攀岩服装和户外装备
2019/09/26 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
招商业务员岗位职责
2013/12/16 职场文书
革命先烈的英雄事迹材料
2014/02/15 职场文书
2016中考冲刺决心书
2015/09/22 职场文书
初中化学教学反思
2016/02/22 职场文书