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 Math.random()随机数函数
Nov 04 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
Dec 21 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
Javascript实现倒计时时差效果
May 18 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
Aug 24 Javascript
javascript中一些奇葩的日期换算方法总结
Nov 14 Javascript
聊聊鉴权那些事(推荐)
Aug 22 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
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的开发框架的现状和展望
2007/03/16 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
PHP处理SQL脚本文件导入到MySQL的代码实例
2014/03/17 PHP
php读取der格式证书乱码解决方法
2015/06/22 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
json与jsonp知识小结(推荐)
2016/08/16 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
详解js删除数组中的指定元素
2018/10/31 Javascript
微信小程序日历效果
2018/12/29 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python logging模块学习笔记
2014/05/24 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
公司道歉信范文
2014/01/09 职场文书
党员违纪检讨书
2014/02/18 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
关于国庆节的广播稿
2015/08/19 职场文书
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
Django migrate报错的解决方案
2021/05/20 Python
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA