iframe 页面嵌套
由于目前项目基础界面,业务逻辑一样,只是细微有所差别。因而使用iframe来进行定制化处理。
如何来区分不同需求不同页面呢?
最初是想通过url
携带参数来进行区分,但是随着需求变多,定制化也越来越细微,若是再使用url进行处理,有些太累赘了。因而思量再三,开始使用postMessage
进行处理。
postMessage
- 满足跨域(不同域名间通信)
message
可以传递对象targetOrigin
可以指定哪些窗口接收信息
代码展示及描述
- 父向子传递信息
parent.html
- html
<iframe id="iframe" src="http://DOMAIN1.com/child.html"></iframe>
- js
const iframe = document.getElementByID('iframe')
const sendChildData = {
style: {
btn_color: '#fff'
}
}
// 默认只要是嵌套的页面都可以接收信息 *
iframe.contentWindow.postMessage(sendChildData, '*')
child.html
- html
<button id="btn">提交</button>
- js
window.addEventListener('message', function (e) {
if (!e.data) return
const { style } = e.data
const btn = document.getElementByID('btn')
btn.style.color = style.btn_color
}, false)
子向父传递参数
此处代码省略,简述实现原理
- 需要明确 谁 发送
postMessage
, 哪儿接受message
- 信息发给谁,谁就使用。在父向子时,需要找到
iframe
窗口;同理子向父,就需要找到父窗口window.parent
message
直接使用window.addEventListener('message', function () {}, false)
来进行处理即可
- 信息发给谁,谁就使用。在父向子时,需要找到
需要注意的一些问题
- 需要iframe加载完,才能发送信息,否者子元素无法获取到,推荐使用
window.onload
(因为onload是等所有资源加载才执行) - 由于并非是只有你一人使用
postMessage
,因而最好相互沟通,或者传入特定参数进行判断,不然接收多次数据,就有些凌乱了
使用iframe可以完成什么
- 常见的iframe逻辑触发,页面样式跟着改变,因而需要实时通知父元素,自己的高度。这在之前,更多地是使用
setInterval
定时去查询,但是多少总有些不好。而使用postMessage
便可以简化,事件触发就调用一下发送postMessage
事件 - 跨域通信,这个上面已有,就不细述
总结
- 使用时,尽量指定
origin
,这样安全些 - 鉴于使用
iframe
多少总有些安全顾虑,最新Google
新出了一个标签Portals
,只是目前还没有正式开始
iframe 页面嵌套的更多相关文章
- django 重定向如何解决iframe页面嵌套问题
出现问题背景:从登录页进入到首页后,如出现后台重启或者用户清除cookie,或者session过期,token验证等问题,会重定向到登录页.由于使用的是iframe,出现登录页面嵌套在首页框架下.很是 ...
- 如何将一个HTML页面嵌套在另一个页面中
一 在原页面嵌入其他页面 1.使用iframe框架 客户端页面嵌套可以使用iframe的方法,弊端是必须事先想好被嵌套的页面在首页中要占多大的位置. 如果被嵌套页面太大,超过事先定义的宽度或高度,则首 ...
- 页面嵌套 Iframe 产生缓存导致页面数据不刷新问题
最近遇到个比较古怪的问题:当页面嵌套多个 Iframe 时会出现 Iframe 里包含的页面无法看到最新的页面信息. 初步解决方案,在 Iframe 指向的页面地址后缀添加一个随机数或者时间戳.这样能 ...
- html页面嵌套两个iframe页面导致第二个iframe页面高度失效的问题
1:这是因为最里面嵌套的iframe页面html和body高度无法设置问题,我的解决办法是js去控制iframe高度 2:js获取最子页面(content内容区域)的高度 var ifremHeigh ...
- Asp.net MVC访问框架页中嵌套的iframe页面时,如果session或cookie过期,登录验证超时怎样自动跳转到登录页
一般登录验证的过滤器中,使用验证过滤器的Redirect方法,将请求重定向到指定的URL.但是如果我们要访问的页面是一个嵌套在框架页中的iframe页面时,这种重定向只会对iframe页面凑效,也就是 ...
- iframe标签(页面嵌套)
本文链接:https://blog.csdn.net/weixin_44540236/article/details/92760494 两个不同的页面但是它们的基本框架都是一样,每点击一次左边的导航栏 ...
- asp.net中iframe页面用jQuery向父页面传值
在asp.net页面有时一个页面会通过iframe嵌套另一个页面,下面的例子讲述的是被嵌套的iframe页面向父页传值的一种方式,用jQuery即可. iframe页面代码: <!DOCTYPE ...
- 网站开发进阶(十)如何将一个html页面嵌套在另一个页面中
如何将一个html页面嵌套在另一个页面中 1.IFrame引入 <IFRAME NAME="content_frame" width=100% height=30 margi ...
- html页面嵌套其他网站页面的方法
直接上代码:html页面嵌套其他网站页面的方法 <div> <!--第一种:使用object标签--> <object type="text/html" ...
随机推荐
- python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器
一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...
- python学习之路(10)--难点
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以 ...
- 拉格朗日插值法板子(dls)
namespace polysum { ; ll a[D],f[D],g[D],p[D],p1[D],p2[D],b[D],h[D][],C[D]; ll calcn(int d,ll *a,ll n ...
- 胜利点20191010-5 alpha week 1/2 Scrum立会报告+燃尽图 03
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8747 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...
- io.h配置 ubuntu
https://www.cnblogs.com/liuyangak/articles/3239238.html https://blog.csdn.net/jiao_mrswang/article/d ...
- Mac-连接Windows远程桌面软件
链接:https://download.csdn.net/download/ab601026460/9885775 https://blog.csdn.net/ab601026460/article/ ...
- char类型可不可以存储一个汉字
java采用unicode,2个字节(16位)来表示一个字符, 无论是汉字还是数字字母,或其他语言.char 在java中是2个字节.所以可以存储中文 Java八种基本数据类型1)四种整数类型(byt ...
- Jquery 选择器的用法
用js 动态生成<ul>标签的<li>条目,因为在动态的创建过程中li的点击事件是不太方便的,因此采用JQuery 的类选择器来实现. html代码: <div id=& ...
- golang中,unsafe.sizeof到底是干嘛的?
https://www.golangtc.com/t/5ad833404ce40d2654053485 小生初学Go,有一点不懂,今天为了知道空结构体到底占多大的空间的时候,去百度说用unsafe.s ...
- 使用conda安装命令时一直出现问题,因为从2019年4月添加的国内镜像都不能用了
安装过程中出现以下问题:(历尽千辛万苦,终于才查到原来是清华源,腾讯源都不能用了)The remote server could not find the noarch directory for t ...