vue中使用postMessage进行跨越传值

17 篇文章 0 订阅
1 篇文章 0 订阅

接受的页面 

<!-- storeOperations.vue门店运营一览 -->
<template>
   <section class="main-content">
 
           <iframe id="child" width="0" src="http://www.list.com/acs/ceshi">                </iframe>  
    </section>
</template>

<script>
    
    console.log(localStorage.getItem("apiRouter"),'************************','验证');
    if(!localStorage.getItem("apiRouter")||localStorage.getItem("apiRouter").indexOf("webpack")!==-1){
         window.addEventListener('message', function(messageEvent) {
        var data = messageEvent.data;
        localStorage.setItem("apiRouter",data)
        console.info('message from2 child:', data);
        },false);
    }
   
</script>

<style scoped  lang="less">
   

</style>

发送的 页面

<template>
   <section class="main-content">
       <el-button @click="sendData">传递数据测试</el-button>
    </section>
</template>

<script>
    import mixin from "pack/common/js/mixin";
    export default {
        mixins: [mixin],
        name:'ceshi001',
        data() {
            
            return {
                'pageName'              :getPagename(),                 //页面标题
                'tableList'             :[],                           //列表
                isLoading:false,
            }
        },
        mounted(){
            // this.$store.dispatch('getCache').then(res=>{
            //     if(res.success){
            //         Object.assign(this.$data , res.model);
            //         //页面是否需要刷新
            //         if(res.refresh){
            //             this.init();
            //         }
            //     }else{
            //         this.init(); 
            //     }
            // })
            //  this.init(); 
            // window.addEventListener('message', function(e) {
				
			// 	if (e.source != window.parent) 
			// 		return;
			// 		console.log(e.data,'接收父数据')
			// 	var list = localStorage.getItem("apiRouter");
			// 	window.parent.postMessage(list, '*');
			// 	console.log(list,'传递子数据')
            // }, false);
            var list = localStorage.getItem("apiRouter");
            window.parent.postMessage(list, '*');
        },
        methods: {
            init(){
               
            },
            sendData(){
                	//弹出一个新窗口
                var domain = 'http://225.225.225.225:8080';
                var myPopup = window.open(domain 
                            + '/acs/roleList','myWindow');
                
                //周期性的发送消息
                setTimeout(function(){
                    //var message = '当前时间是 ' + (new Date().getTime()); 
                    //     var message = {name:"站点",sex:"男"}; //你在这里也可以传递一些数据,obj等
                    // console.log('传递的数据是  ' + message);
                    myPopup.postMessage(localStorage.getItem("apiRouter"),domain);
                },1000);
            }
        },
        
    }
</script>

<style scoped>
.col-flex .form-label{
    width: 120px;
}
.warnFont{
    color: #FF4200!important;
}
.add{
    font-size:17px;
    margin: 0 5px;
    cursor: pointer;
    /* padding: 10px; */
    padding: 0 5px;
    background: url('./img/arrowdown.png') center center no-repeat;
    opacity: .3;
}
.reduce{
    font-size:17px;
    margin: 0 5px;
    padding: 0 5px;
     cursor: pointer;
    background: url('./img/arrowup.png') center center no-repeat;
    opacity: .3;
}
.open-toggle{
    /* color:#409EFF; */
    opacity: 1;
}
</style>

完成代码解决您的问题

Vue使用postMessage发送消息是通过在组件使用`window.postMessage()`方法来实现的。下面是一个示例: 首先,在Vue组件,你可以在某个事件触发时调用`window.postMessage()`方法发送消息。例如,在点击按钮时发送消息,可以在方法添加以下代码: ```javascript methods: { sendMessage() { const message = 'Hello World!'; // 要发送的消息内容 window.postMessage(message, '*'); // '*' 表示发送给所有窗口,你也可以指定一个特定的目标窗口 } } ``` 接下来,你需要在Vue组件监听窗口接收到的消息。可以在`mounted()`生命周期钩子函数添加以下代码: ```javascript mounted() { window.addEventListener('message', this.receiveMessage); }, beforeUnmount() { window.removeEventListener('message', this.receiveMessage); }, methods: { receiveMessage(event) { const message = event.data; // 接收到的消息内容 console.log('Received message:', message); // 在这里可以根据接收到的消息进行相应的处理 } } ``` 以上代码会监听窗口接收到的所有消息,并在控制台打印接收到的消息内容。你可以根据实际需求进行进一步处理。 请注意,`window.postMessage()`方法发送的消息是以事件形式传递给窗口的,所以你需要在Vue组件通过`window.addEventListener('message', handler)`来监听接收到的消息。同时,为了防止内存泄漏,记得在组件销毁前使用`window.removeEventListener('message', handler)`来移除监听器。 希望以上信息对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值