主页面、iframe之间调用以及传值
主页面、iframe之间的调用和传值,无非就是两个交互形式:
- 主页面与子页面的交互
- 子页面之间的交互
接下来要讲的是四种交互传值的方式:利用postMessage方法传值、DOM操作传值、URL方式传值、利用全局属性传值
利用postMessage方法传值
这种方式非常像事件绑定、监听。postMessage方法接收两个参数:一条消息、一个表示消息接收方来自哪个域的字符串。第二个参数对保障安全通信非常重要,可以防止浏览器把消息发送到不安全的地方。
demo:
/*主页面发送消息,子页面接收消息的情况*/
//主页面发送消息
var myFrame = document.getElementById("myFrame");//获取框架
myFrame.contentWindow.postMessage("message", "http://crm.piao.qunar.com:8080"); //子页面接收消息,并且做出回应
window.addEventListener('message', function(e){
if(e.origin == "http://crm.piao.qunar.com:8080") {
console.log(e.data);//可以对数据进行处理
e.source.postMessage("确认收到消息", "http://crm.piao.qunar.com:8080");
}
}); /*子页面发送消息,主页面接收消息的情况*/
//子页面发送消息
parent.contentWindow.postMessage("message", "http://crm.piao.qunar.com:8080"); //主页面接收消息
window.addEventListener('message', function(e){
if(e.origin == "http://crm.piao.qunar.com:8080") {
console.log(e.data);//可以对数据进行处理
e.source.postMessage("确认收到消息", "http://crm.piao.qunar.com:8080");
}
});
注意:
- postMessage()的第一个参数最早是作为“永远都是字符串”来实现的。但后来这个参数的定义改了,改成允许传入任何数据结构。可是,并非所有浏览器都实现了这一变化。为保险起见,使用postMessage()时,最好还是只传字符串。如果你想传入结构化的数据,最佳选择是先在要传入的数据上调用JSON.stringify(),通过postMessage()传入得到的字符串,然后再在onmessage事件处理程序中调用JSON.parse()。
- e.source大多数情况下只是window对象的代理,并非实际的window对象。换句话说,不能通过这个代理对象访问window对象的其他任何信息。
- 使用postMessage可能存在兼容性的问题
DOM操作传值
iframe有contentWindow属性,通过contentWindow属性可以对iframe里面的DOM进行操作实现信息交互。还有几个特殊的属性top(最顶层框架)、parent(父级框架)、self(window自身)。
demo:
//子页面操作父页面
top.document.getElementById("mainElement").remove();
//父页面操作子页面
document.getElementById("subFrame").contentWindow.document.getElementById("subElement");
//子页面一操作子页面二
top.document.getElementById("subFrame2").contentWindow.document.getElementById("subElement2");
//子页面二操作子页面一
top.document.getElementById("subFrame1").contentWindow.document.getElementById("subElement1");
URL方式传值
通过在URL上添加数据,然后解析URL,得到相应数据;不过这种方式只能是子页面在加载时,父页面向子页面传输信息。
注意:在URL上添加一些特殊参数时,记得使用encodeURIComponent方法对其进行编码
利用全局属性传值
直接在top、parent等全局变量中添加属性,然后无论是哪个框架都可以通过全局性的属性,取到其值
文件的共用性
主页面与子页面、子页面与子页面之间的JS、CSS文件都是不能通用的,也就是不同框架的JS、CSS在未做特殊处理的情况下,不能相互使用。
主页面、iframe之间调用以及传值的更多相关文章
- 父窗口与iFrame之间调用方法和元素
父窗口与iFrame之间调用方法和元素 父窗口调用子窗口: 调用元素 js格式: var obj=document.getElementById("iframe的name").co ...
- Iframe父子窗口之间的跨域事件调用和传值
实现方案1:location.hash传值 父页面:parent.html(所在域:www.parent.com) 子页面:child.html(所在域:www.child.com) 要实现父子页面双 ...
- JS备忘--子父页面获取元素属性、显示时间,iframe之间互相调用函数
//页面加载完成后执行 $(function () { getHW();}); //当用户改变浏览器大小改变时触发 $(window).resize(function () { setHW(); }) ...
- [转]内嵌页面iframe以及和其兄弟iframe的相互传值
原文出处 iframe的调用包括以下几个方面:(调用包含html dom,js全局变量,js方法) 主页面调用iframe: iframe页面调用主页面: 主页面的包含的iframe之间相互调用: 主 ...
- 解决同一页面中两个iframe互相调用jquery,js函数
这一个月又没更新博客,唉,懒癌又犯了,今天解决了一个问题,关于两个iframe互相调用jquery函数方法 a.html中有两个iframe,如下: <iframe width="10 ...
- jQuery iframe之间相互调用
,子iframe内调用父类函数方法: window.parent.func(); ,子Iframe中获取父界面的元素: $("#xx", window.parent.documen ...
- 两个iframe之间传值
例如:点击后会把另一个iframe中的值得到弹出 Main: <html lang="en" xmlns="http://www.w3.org/1999/xhtml ...
- iOS 中 h5 页面 iframe 调用高度自扩展问题及解决
开发需求需要在 h5 中用 iframe 中调用一个其他公司开发的 html 页面. 简单的插入 <iframe /> 并设置宽高后,发现在 Android 手机浏览器上打开可以正常运行, ...
- react-native页面之间的相互传值
react-native页面之间的相互传值 之前在自己学习react-native的时候,在页面跳转和传值问题上花了一段时间去网上搜索和查找资料,自己总结了两个方法.可以参考 https://blog ...
随机推荐
- 利用WCF创建简单的RESTFul Service
1):用VS2013创建一个WCF的工程,如下图所示: 2):我们来看一下默认状态下的config文件内容,这里的内容我们会再后续的步骤中进行修改 <?xml version="1.0 ...
- Spring快速入门
什么是Spring Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 分层 SUN提供的EE的三层结构:web层.业务层.数据访问层(持久层/集成层) Strut ...
- shell example01
条件判断 if [[ -e ${1} ]]; then echo "$(tput setaf 2) found ${1} $(tput sgr0)" cat ${1} else e ...
- 浅谈JAVA设计模式
没有万行的代码量,就不要想搞清楚设计模式.目前本人代码量大约在六千五百行,2016年需要继续努力,尽快完成万行之约. 工作之余需要,下面提前简单讨论一下设计模式. 创建型模式,共五种:工厂模式.抽象工 ...
- 基于淘宝弹性布局方案lib-flexible的问题研究
上篇文章<淘宝弹性布局方案lib-flexible实践>结合一个简单的实例,说明了lib-flexible的基本用法,但是lib-flexible的这种适配方式在适配的时候会修改viewp ...
- MySQL:索引工作原理
索引查找:通过索引键找到索引的叶子节点,再通过叶子节点的标记快速找到表中对应的行数据,再返回指定的列 索引找查是通过索引键定先位到一块局部区域,再开始扫描匹配的数据的. 为什么需要索引(Why is ...
- Maya Plugin 编译Maya插件
Maya自身的功能就已经非常强大了,但是更棒的是它的扩展性非常强,提供API让用户自己来编写插件Plugin.Maya的插件主要是两种,一种是用C++编写的,后缀为".mll",另 ...
- css实现水平垂直居中
一.单行文字居中: height: 100px;height: 100px;overflow: hidden; 二.多行内容居中(容器的高度不能固定): padding-top: 24px;paddi ...
- 【luogu】 P1433 吃奶酪
题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块奶酪的坐标. ...
- Daily Scrum02 12.10
不同于往常,今天我们在中午体育课后,就简单的进行了一次小组会议,主要是讨论了一下,我们的单词软件的查询功能的优化的进度与暂时达到的效果,界面的各个按钮等元素的素材的准备有点拖慢,由于要反复修改,查看效 ...