iframe父子页面通信

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

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.暂时未涉及待定

时间: 2024-10-13 09:02:15

iframe父子页面通信的相关文章

iframe父子页面操作-比较好用的两个方法-window.parent/oframe.contentWindow.document

发现比较好用的iframe父子页面操作方法,记录一下 1.父页面 test.html <iframe id="iframe1" src="iframe.html"></iframe> 获取iframe    var oframe = document.getElementById("main") 获取子页面  var child =  oframe.contentWindow.document 获取子页面元素      v

iframe父子页面之间相互调用元素和函数

1 <!doctype html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <meta name="Keywords" content=""> 6 <meta name="Description" con

基于iframe父子页面传值的方法。

之前项目中用layer.js作为弹窗的框架,发现layer.js中大部分弹窗都是通过iframe模拟的.为此,在项目中遇到了不少坑.印象最深的就是父子页面传值的问题.后面经过一段时间的研究.总结出以下几种方法: 一.在子页面的js中直接使用parent获取父级页面中的对象方法.如: $(document).ready(function(){ $("#people_add_cardActiveTime").text(laydate.now(0, 'YYYY-MM-DD 00:00:00'

iframe父子页面交互

以下的父页面与子页面交互的方法必须起一个页面服务才能使用(通过域名来访问)并且的保证父页面与子页面是在同一域名下,不然是会报错的 父页面调用子页面 获取父页面的ifram的id或calss之后可以通过contentWindow这个对象获取子页面的元素和方法.父页面调用子页面的元素和方法时,必须要等iframe加载完毕,或者在onload 方法里执行,不然是获取不到的! contentWindow 可取得子窗口的 window 对象. document.getElementById('main')

iframe父子页面通讯

由于公司的service后台,是前端搭的架子,里面各个tab菜单栏都是不同的工程,通过iframe来嵌套,在业务越来越复杂的情况下,总是避免不了iframe之间的通讯, 下面是两种iframe之间的通讯: 1.父子iframe通过监听来实现 在iframe的子页面里使用postMessage向父级页面传参: window.parent.postMessage({type: "closeIbooking", fromSource: "turnoffIbooking"}

iframe 父子页面方法调用

在写代码的时候经常会用到将一个网页嵌入到另一个网页中,w3c也规定了一个标签<iframe>,这个标签本身就支持跨域,而且所有的浏览器都支持 iframe具有以下属性: 1.frameborder 设为1代表显示周围边框,设置为0不显示周围边框 2.height 设置iframe的高度 3.width 设置iframe的宽度 4.longdesc 属性值为URL 规定一个页面,该页面包含了有关 iframe 的较长描述 5.marginheight 定义 iframe 的顶部和底部的边距 6.

iframe 父子页面取值

使用jquery操作iframe 1. 内容里有两个ifame <iframe id="leftiframe"...</iframe> <iframe id="mainiframe..</iframe>leftiframe中jQuery改变mainiframe的src代码: $("#mainframe",parent.document.body).attr("src","http://www

JS iframe父子页面元素调用方法 window parent top 解释

父窗口调用子窗口 var hasMore = parent.document.getElementByIdx_x_x_x("hasMore").value;子窗口调用父窗口document.frames["ifrmBoxFrame"].me.preLoadBoxGrid(); window.frames["iframe_ID"].document.getElementByIdx_x_x_x("iframe_document_object

js之iframe子页面与父页面通信

iframe子页面与父页面通信根据iframe中src属性是同域链接还是跨域链接,通信方式也不同. 一.同域下父子页面的通信 父页面parent.html <html> <head> <scripttype="text/javascript"> function say(){ alert("parent.html"); } function callChild(){ myFrame.window.say(); myFrame.wi