嵌入式iframe子页面与父页面js通信的方法


Posted in Javascript onJanuary 20, 2015

本文实例讲述了嵌入式iframe子页面与父页面js通信的方法。分享给大家供大家参考。具体分析如下:

iframe框架中的页面与主页面之间的通信方式根据iframe中src属性是同域链接还是跨域链接,有明显不同的通信方式,同域下的数据交换和DOM元素互访就简单的多了,而跨域的则需要一些巧妙的方式来实现通信。

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

父页面 parent.html:

<html>

<head>

<script type="text/javascript">

function say() {

alert("parent.html------>I'm at parent.html");

}

function callChild()

{

//document.frames["myFrame"].window.say();//只适用于ie浏览器

myFrame.window.say();

myFrame.window.document.getElementById("button").value="我变了";

}

</script>

</head>

<body>

<input type=button value="调用child.html中的函数say()" onclick="callChild()">

<iframe name="myFrame" src="child.html"></iframe>

</body>

</html>

子页面 child.html:

<html>

<head>

<script type="text/javascript">

function say()

{

alert("child.html--->I'm at child.html");

}

function callParent() {

parent.say();

parent.window.document.getElementsByName("myFrame")[0].style.height="100px";

}

</script>

</head>

<body>

<input id="button" type=button value="调用parent.html中的say()函数" onclick="callParent()">

</body>

</html>

方法调用

如上面示例所示父页面调用子页面的方法可通过:FrameName.window.childMethod();(这种方式兼容各种浏览器)
子页面调用父页面的方法:parent.window.parentMethod();

DOM元素访问

根据FrameName.window得到了子窗口对象之后,再访问其中的DOM元素就跟访问同一页面中的DOM元素没区别了都可以通过

document.getElementById(),document.getElementsByName()[index]
如:
parent.window.document.getElementsByName("myFrame")[0];

myFrame.window.document.getElementById("button")
其中的window都是可以省略的。

注意事项

要确保在Iframe加载完成后再进行操作,如果Iframe还未加载完成就开始调用里面的方法或变量,无疑会产生错误。判断Iframe是否加载完毕有两种方法:

1.在Iframe上用onload事件;
2.用document.readyState=="complete"来判断

二、跨域父子页面通信方法

如果iframe所链接的是外部页面,因为安全机制则不能使用同域名下的通信方式了。

父页面向子页面传递数据

实现的技巧就是利用 location 对象的 hash 值,通过它传递通信数据,我们只需要在父页面设置 iframe的 src 后面多加个#data 字符串(data就是你要传递的数据),然后在 子页面 中通过某种方式能即时的获取到这儿 data 就可以了,其实常用的一种方式就是:

1. 在 子页面 中通过 setInterval 方法设置定时器, 监听 location.href 的变化即可获得上面的 data 信息

2. 然后 子页面 就能根据这个 data 信息进行相应的逻辑处理。

子页面向父页面传递数据

实现的技巧就是利用一个代理 Iframe C,它嵌入到 子页面中,并且和父页面必须保持是同域,然后我们通过它充分利用上面第一种通信方式的实现原理就能把 子页面的数据传递给 iframeC,接下来的问题就是怎么让iframeC把数据传递给主页面A ,因为,iframeC 和主页面是同域的,所以它们之间传递数据就变得简单多了,属于同域名下的通信问题了,如前面所讨论的,在这里的可以使用一个经常使用的属性 window.top (也可以使用window.parent.parent),它返回对载入浏览器得最顶层 window 对象的引用,这样我们就能直接条用父页面中方法啦。

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
alixixi runcode.asp的代码不错的应用
Aug 08 Javascript
javascript 学习之旅 (3)
Feb 05 Javascript
JavaScript中的闭包原理分析
Mar 08 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
JScript中的条件注释详解
Apr 24 Javascript
在JavaScript中使用NaN值的方法
Jun 05 Javascript
fullCalendar中文API官方文档
Feb 07 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
Apr 24 Javascript
jQuery判断自定义属性data-val用法示例
Jan 07 jQuery
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 Javascript
jQuery实现简单轮播图效果
Dec 27 jQuery
javascript浏览器窗口之间传递数据的方法
Jan 20 #Javascript
用队列模拟jquery的动画算法实例
Jan 20 #Javascript
jQuery 处理页面的事件详解
Jan 20 #Javascript
DOM 事件流详解
Jan 20 #Javascript
jQuery链使用指南
Jan 20 #Javascript
使用jQuery管理选择结果
Jan 20 #Javascript
javascript动态修改Li节点值的方法
Jan 20 #Javascript
You might like
php 学习资料零碎东西
2010/12/04 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
yii2分页之实现跳转到具体某页的实例代码
2016/06/02 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
在Laravel 中实现是否关注的示例
2019/10/22 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jquery获取节点名称
2015/04/26 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
VUEJS实战之构建基础并渲染出列表(1)
2016/06/13 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
vue2.0父子组件间通信的实现方法
2017/04/19 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
[02:48]DOTA2超级联赛专访海涛:你们的选择没有错
2013/06/07 DOTA
在Python的Django框架中编写编译函数
2015/07/20 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
Python多项式回归的实现方法
2019/03/11 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Python短信轰炸的代码
2020/03/25 Python
python调用私有属性的方法总结
2020/07/24 Python
YOOX美国官方网站:全球著名的多品牌时尚网络概念店
2016/09/11 全球购物
美国在线宠物商店:Chewy
2019/01/12 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
网上商城创业计划书范文
2014/01/31 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
病媒生物防治方案
2014/05/13 职场文书
慈善晚会策划方案
2014/05/14 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
Linux安装apache服务器的配置过程
2021/11/27 Servers
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL