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 相关文章推荐
用tip解决Ext列宽度不够的问题
Dec 13 Javascript
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
JavaScript程序设计之JS调试
Dec 09 Javascript
js 上传文件预览的简单实例
Aug 16 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
Dec 28 Javascript
jQuery实现文档树效果
Feb 20 Javascript
详解用node-images 打造简易图片服务器
May 08 Javascript
浅谈Node 调试工具入门教程
Mar 20 Javascript
layer提示框添加多个按钮选择的实例
Sep 12 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
Nov 04 Javascript
js实现限定区域范围拖拉拽效果
Nov 20 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中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP 如何利用phpexcel导入数据库
2013/08/24 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
JS获取iframe中marginHeight和marginWidth属性的方法
2015/04/01 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
javascript实现密码验证
2015/11/10 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
python使用nntp读取新闻组内容的方法
2015/05/08 Python
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python中with及contextlib的用法详解
2017/06/08 Python
python分布式编程实现过程解析
2019/11/08 Python
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
中间件分为哪几类
2012/03/14 面试题
什么时候用assert
2015/05/08 面试题
项目投资建议书
2014/05/16 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python
pd.DataFrame中的几种索引变换的实现
2022/06/16 Python