vue中iframe的使用及说明

作者:芝士焗红薯 时间:2024-05-13 09:37:25 

关于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

标签:vue,iframe
0
投稿

猜你喜欢

  • Mysql5.7修改root密码教程

    2024-01-29 02:20:19
  • SQL Server复制功能 巧妙选择避开Bug

    2011-01-04 17:03:00
  • Opencv实现眼睛控制鼠标的实践

    2023-07-04 11:21:52
  • 微信小程序列表渲染功能之列表下拉刷新及上拉加载的实现方法分析

    2024-05-11 09:34:44
  • go mayfly开源项目代码结构设计

    2024-02-20 04:51:17
  • asp如何对文件进行操作?

    2009-11-20 18:31:00
  • PHP 中关于ord($str)&gt;0x80的详细说明

    2024-05-13 09:24:13
  • Python实现爬取并分析电商评论

    2022-11-21 17:18:47
  • python tkinter实现彩球碰撞屏保

    2021-12-31 15:12:29
  • 微信JSSDK调用微信扫一扫功能的方法

    2024-04-29 13:46:02
  • pandas添加新列的5种常见方法

    2022-08-09 16:45:03
  • python使用pygame框架实现推箱子游戏

    2022-02-12 00:34:13
  • SQL Server 2005实现数据库缓存依赖

    2009-05-07 13:20:00
  • 15行Python代码实现免费发送手机短信推送消息功能

    2023-11-01 10:20:51
  • Javascript编写Asp时需要注意的一些地方

    2008-04-06 14:20:00
  • 微信小程序实现多文件或者图片上传

    2024-04-29 14:06:10
  • Python中使用中文的方法

    2021-09-26 05:46:39
  • Django权限设置及验证方式

    2022-12-28 23:45:18
  • 数据库性能优化之冗余字段的作用

    2011-03-03 19:21:00
  • vue-router懒加载速度缓慢问题及解决方法

    2024-04-27 16:07:23
  • asp之家 网络编程 m.aspxhome.com