vue中iframe的使用及说明
作者:芝士焗红薯 发布时间:2024-05-13 09:37:25
标签:vue,iframe
关于iframe的使用
iframe在同域时能自由操作iframe和父框架的内容(DOM),在跨域时可以实现页面跳转。
<iframe id="iframe" :src="iframeSrc" style="height: calc(100% - 50px)" width="100%" frameborder="0"></iframe>
获取iframe里面的内容
iframe.contentWindow
, 获取iframe的window对象iframe.contentDocument
, 获取iframe的document对象
const _iframe = document.getElementById('iframe').contentWindow
CDM跨域
如果你设置的iframe的域名和你top window的域名完全不同,可以使用CDM(cross document messaging)进行跨域消息的传递。
发送消息: 使用postmessage方法
postMessage(message, targetOrigin)
message
: 传递给iframe的内容, 通常是string,最好不要传object对象,需要传对象时,使用JSON.stringfy转换。targetOrigin
: 接受你传递消息的域名,可以设置绝对路径,也可以设置""或者"/"。 表示任意域名都行,"/"表示只能传递给同域域名。
_iframe.postMessage(JSON.stringify(_obj), '*')
接受消息: 监听message事件
当targetOrigin接受到message消息之后,会触发message事件。 message提供的event对象上有3个重要的属性,data,origin,source.
window.addEventListener('message', function (event) {
? ? ? console.log(event)
? ? ? if (event.origin === window.callBackUrl.iframeSrc) {
? ? ? ? _this.childData = event.data
? ? ? ? console.log(event.data)
? ? ? ? _this.saveForm()
? ? ? }
? ? })
使用iframe的总结
需求描述:在后台管理系统中需要预览配置的数据在手机上显示的样式,方便后台管理人员操作,因为预览的内容比较多,h5已经写好了一套代码,所以利用iframe将h5的页面展示引入到后台
代码展示
iframe:
<iframe
? id="iframe"
? ref="iframe"
? frameborder="0"
? class="iframe"
? :src="srcH5" ? //srcH5:预览页面的地址
/>
?
srcH5:'/iframeH5/preview',
父页面给子页面传值:
var iframe = document.getElementById('iframe');
var msg = {name:'张三'}
var childDomain = 'http://localhost:80/' ? //预览页面的域名
iframe.contentWindow.postMessage(msg, childDomain);
子页面给父页面传值:在mounted中调用,避免未渲染完成,无法拿到数据
? ? ? ? //拿到父页面传递的值
? ? ? ?window.addEventListener('message', (obj) => {
? ? ? ? ? this.obj = obj.data;?
? ? ? ? ? console.log('拿到数据了吗', this.obj );
? ? ? ? }, false);
? ? ? ??
? ? ? ? //将预览成功的信息返回给父页面
? ? ? ? window.parent.postMessage({
? ? ? ? ? data: {
? ? ? ? ? ? code:'success'
? ? ? ? ? }
? ? ? ? }, '*');
父页面监听子页面返回的成功信息,做进一步操作
? ? ?window.addEventListener('message', this.handleMessage);
? ? ?// 监听h5页面的通信
? ? ? handleMessage (event) {
? ? ? ? const data = event.data.data;
? ? ? ? if(data && data.code === 'success') {
? ? ? ? ? 。。。。。。
? ? ? ? }
? ? ? },
来源:https://blog.csdn.net/weixin_44320032/article/details/123871522


猜你喜欢
- 在安装wordpress的时候,按照里面的readme.html的步骤进行安装,但是在访问wp-admin/install.php的时候就出
- Flask-sqlalchemy是关于flask一个针对数据库管理的。文中我们采用一个关于员工显示例子。首先,我们创建SQLALCHEMY对
- 怎样解决MySQL 5 0 16的乱码问题? 本文给出了解决方法:问:怎样解决MySQL 5.0.16的乱码问题?答:MySQL 5.0.1
- mysql数据库开机报错: InnoDB: The log sequence number in ibdata files does not
- 1 前言正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好
- 问题描述字符串本身作为 bytess = '\xe4\xbd\xa0\xe5\xa5\xbd'解决方案s.encode(
- Exec 是 os 包中的一个子包,它可用于使用 Go 运行外部命令。Go exec 命令教程展示了如何在 Golang 中执行 shell
- 先把要恢复的文件置于MS SQL里的DATA文件里,进入MS SQL主数据库服务器。 1.我们使用默认方式建立一个供恢复
- 安装包网盘下载链接:链接: https://pan.baidu.com/s/1TLLeCnNkHtuTiAxHBl39hg 提取码: 9yg
- 本教程使用的是python 3 和django为事例打开pycharmfile -> new
- 目录range函数zip() 函数其它内置函数数据类型转换相关内置函数变量相关函数数学相关函数进制相关函数高阶函数sorted(iterab
- 注册了oracle的登录名:10402852@qq.com密码:dsideal******** 后面的*号是王卓常用的密码,但是
- 例子:def re_escape(fn): def arg_escaped(this, *args):&
- 一 前言官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/r
- 使用WSH调用系统的Ping命令,将Ping的结果重定向到一个文本文件中去,再把文本文件显示到网页中具体做法如下:首先, 建一个.BAT文件
- 1、Numpy是什么很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使
- 上段时间,团队内部有过好几次几次给力的分享,这里对西风师傅分享的继承机制稍作整理一下,适当加了写口语化的描述,留作备案。一、讲个故事吧澄清在
- 译注:原文是StackOverflow上一个如何用程序读取迷宫图片并求解的问题,几位参与者热烈地讨论并给出了自己的代码,涉及到用Python
- 本文主要列出来python图形开发GUI库pyqt5的窗体,控件属性与方法如果你想看看python图形开发GUI库pyqt5的基础使用方法可
- 以前写的很简单,只有几句话,最近发现本文是本博客阅读量最大的一篇文章,觉得这样有种把人骗进来的感觉,于是又细化了一些。如果还有不好的地方,欢