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 ajax中按钮button和submit的区别分析
Oct 07 Javascript
在表单提交前进行验证的几种方式整理
Jul 31 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
Nov 23 Javascript
JavaScript函数详解
Nov 17 Javascript
vue中倒计时组件的实例代码
Jul 06 Javascript
浅谈Vue数据响应
Nov 05 Javascript
jQuery内容选择器与表单选择器实例分析
Jun 28 jQuery
Vue项目实现简单的权限控制管理功能
Jul 17 Javascript
Vue动态生成表格的行和列
Jul 18 Javascript
Vue实现图片与文字混输效果
Dec 04 Javascript
JavaScript Image对象实现原理实例解析
Aug 26 Javascript
JavaScript WeakMap使用详解
Feb 05 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中break及continue两个流程控制指令区别分析
2011/04/18 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
使用PHP开发留言板功能
2019/11/19 PHP
PHP 使用位运算实现四则运算的代码
2021/03/09 PHP
javascript 写类方式之四
2009/07/05 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
jQuery EasyUI 布局之动态添加tabs标签页
2015/11/18 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
2020/02/16 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
[01:47]2018年度DOTA2最具人气解说-完美盛典
2018/12/16 DOTA
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Django模板之基本的 for 循环 和 List内容的显示方式
2020/03/31 Python
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
高考百日冲刺决心书
2015/09/23 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
六年级语文教学反思
2016/03/03 职场文书