vue中iframe如何让父页面刷新_Vue下iframe如何实现和父窗口的通信

在父窗口页面代码:

1

2

4 :visible.sync="visible"

5 width="30%"

6 class="ifr-dialog"

7 center8 @opened="handleOpened">

9

10

11

12

13

14

15

16 export default{17 name: 'IframeDialog',18 props: {19 visible: {20 type: Boolean,21 default: false

22 },23 src: {24 type: String,25 default: ''

26 }27 },28 data() {29 return{30 iframeWin: {}31 };32 },33 methods: {34 handleOpened() {35 this.iframeWin = this.$refs.iframe.contentWindow;36 },37 handleMessage (event) {38 //根据上面制定的结构来解析iframe内部发回来的数据

39 const data =event.data;40 console.log(data);41 }42 },43 mounted () {44 //在外部vue的window上添加postMessage的监听,并且绑定处理函数handleMessage

45 window.addEventListener('message', this.handleMessage);46 }47 }48

View Code

在iframe页面:

Hello, world!

当前窗口将在 5秒后自动关闭!

function autoCloseWindow() {

var closeIntv = setInterval(function () {

var num = parseInt(document.getElementById('spNumber').innerText, 10);

if (!num) {

// 向父vue页面发送信息

clearInterval(closeIntv);

window.parent.postMessage({

cmd: 'testCmd',

params: {

msg: 'iframe test'

}

}, '*');

} else {

document.getElementById('spNumber').innerText = num - 1;

}

}, 1000);

}

autoCloseWindow();

这里需要注意的是:

1、在vue中是通过给iframe组件添加ref值来注册引用信息,引用指向的就是DOM元素,注册之后就可以通过$refs来查到对应的DOM元素对象了。

2、只有当元素渲染出来之后,在$refs中才能看到对应的DOM元素,所以我把下面这句话放在对话框打开之后执行,而不是放在mount方法里执行。

this.iframeWin = this.$refs.iframe.contentWindow;3、需要注册监听事件:

window.addEventListener('message', this.handleMessage);

4、给对象推送消息:

// 向父vue页面发送信息

window.parent.postMessage({

cmd: 'testA',

params: {

success: true,

data: {}}

}, '*');

// 外部vue向iframe内部传数据

this.iframeWin.postMessage({

cmd: 'testB',

params: {}

}, '*')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值