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" ...
随机推荐
- A. Detective Book
A. Detective Book time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 扫描工具-Nikto
靶机 192.168.1.101 攻击机 192.168.1.102 尝试ping命令 第一个工具 作用 Httrack --->(把目标的网站复制过来) 这样可以减少与目标系统的交互 mkdi ...
- java set 顺序
在java语言中,提供多种不同的结构来组织对象,Set(集合)是其中的一种,本身是一个接口,其迭代时的顺序取决于其具体实现.典型的实现包括:HashSet:哈希表是通过使用称为散列法的机制来存储信息的 ...
- SQLite索引
索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索.简单地说,索引是一个指向表中数据的指针.一个数据库中的索引与一本书后边的索引是非常相似的. 例如,如果您想在一本讨论某个话题的书中 ...
- DS博客作业8——课程总结
1.当初你是如何做出选择计算机专业的决定的? 本来我在集美大学第一志愿专业是理学院的数据科学与大数据,奈何隔壁县城小伙伴比我高了2分,我就来到了网络,但经过我和她的交流,我意识到我们的课程差不多,同样 ...
- JS基础_Null和Undefind
1.Null Null类型的值只有一个值,就是null null专门用来表示一个为空的对象 var a=null; console.log(a);//nulltypeof a //object 2.U ...
- io.h配置 ubuntu
https://www.cnblogs.com/liuyangak/articles/3239238.html https://blog.csdn.net/jiao_mrswang/article/d ...
- [常用的SQL语句总结]
1. 创建数据库DataBase create database 数据库名称; 2. 删除数据库DataBase drop database 数据库名称 drop database 数据库名称1, ...
- OpenCV学习笔记(4)——图像上的算术运算
学习图像上的算术运算,加法,减法,位运算等 1.图像加法 使用cv2.add()将两幅图像进行加法运算,也可以用numpy运算,直接img+img1.两幅图像的大小和类型必须一致,或者第二个图像可以是 ...
- 如何将打印内容转换为bmp位图文件
bmp是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8 ...