码迷,mamicode.com
首页 > 其他好文 > 详细

iframe父子页面通信

时间:2017-08-26 17:09:25      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:兼容   文件   pre   src   方法   改变   支持   响应   stat   

一、同域下父子页面的通信

  1.父页面调用子iframe页面

   (1)通过iframe的Id获取子页面的dom,然后通过内置属性contentWindow取得子窗口的window对象,此方法兼容各个浏览器

        document.getElementById(‘iframe_Id‘).contentWindow // contentWindow 不能省略

   (2)通过iframe的name直接获取子窗口的window对象

        iframe_Name.window    //window可以省略

   (3)通过window对象的frames[]数组对象直接获取子frame对象

        window.frames[0] 或者 window.frames["iframe_Name"]

 2.子iframe页面调用父页面

   (1)通过parent或top对象获取父页面的window对象

        parent.window 或者 top.window //window 可以省略

 3.主页面内兄弟iframe页面之间的相互调用

   (1)同域下各个iframe窗口之间的元素和方法可以共享

 4.父页面中检测子iframe的加载情况

   (1)子iframe的onload事件

 if (window.attachEvent) {//IE10及以前版本
        document.getElementById(Id).attachEvent(onload, function () {
            mini.alert(IE);
        });
 } else if (window.addEventListener) {//所有主流浏览器除了IE10及以前版本
        $(#Id)[0].addEventListener(load, function () {
            mini.alert(ss);
        });
 }   

   (2)使用定时器捕获子iframe的加载状态

var iFrm = document.getElementById(Id);
var fmState = function () {
if(document.readyState){//document.readyState用于判断文件是否加载完成,只读,firefox不支持
var state = iFrm.contentWindow.document.readyState;
if(state == "complete"){ return;}
window.setTimeout(fmState, 10);
}
}
//在改变src或者通过form target提交表单时,执行语句:

if (fmState.TimeoutI){ window.clearTimeout(fmState.timeoutI);}
fmState.timeoutI = window.setTimeout(fmState, 400);
注释:
1.延迟400毫秒的原因?

  答:因为javascript对DOM的操作是异步的,我们必须等待脚本对DOM落实执行后才开始下一步。
  400秒这个数取决与客户端的设备和浏览器的响应速度,好的设备的响应速度能在10毫秒以内甚
  至更快,但100毫秒左右可能比较大众化,400毫秒应该是十分保守的了。
  总之,较大的毫秒数能适合更多的用户设备状况,并能减少了客户端设备的工作量。

二、跨域下父子页面的通信

  1.暂时未涉及待定

iframe父子页面通信

标签:兼容   文件   pre   src   方法   改变   支持   响应   stat   

原文地址:http://www.cnblogs.com/llljpf/p/7435526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!