嵌入式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 相关文章推荐
JavaScript运行时库属性一览表
Mar 14 Javascript
jQuery操作cookie方法实例教程
Nov 25 Javascript
JS实现简单的键盘打字的效果
Apr 24 Javascript
详解React-Todos入门例子
Nov 08 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
Dec 15 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
Django使用多数据库的方法
Sep 06 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
js实现登录与注册界面
Nov 01 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
vue.js+element 默认提示中英文操作
Nov 11 Javascript
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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
帝国cms目录结构分享
2015/07/06 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
create-react-app中添加less支持的实现
2019/11/15 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
python 合并文件的具体实例
2013/08/08 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
实例解析Python设计模式编程之桥接模式的运用
2016/03/02 Python
python中aioysql(异步操作MySQL)的方法
2019/04/11 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
python高级特性简介
2020/08/13 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
工业设计专业个人求职信范文
2013/12/28 职场文书
先进德育工作者事迹材料
2014/01/24 职场文书
服务员岗位职责
2014/01/29 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python