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 相关文章推荐
HTML Dom与Css控制方法
Oct 25 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
jQuery设置与获取HTML,文本和值的简单实例
Feb 26 Javascript
深入探讨JavaScript String对象
Mar 09 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
Oct 26 Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 Javascript
微信小程序 122100版本更新问题解决方案
Dec 22 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
Aug 24 Javascript
微信小程序实现导航栏选项卡效果
Jun 19 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
Apr 02 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
Sep 11 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 printf输出格式使用说明
2010/12/05 PHP
php变量范围介绍
2012/10/15 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
js数组的操作详解
2013/03/27 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
javascript三种代码注释方法
2016/06/02 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
js实现图片实时时钟
2020/01/15 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
TensorFlow模型保存和提取的方法
2018/03/08 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
简单了解Python生成器是什么
2019/07/02 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
Java的五个基础面试题
2016/02/26 面试题
考试违纪检讨书
2014/02/02 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技