Vue2 H5与uniapp内嵌webview实时通讯

原理:通过监听url中的hash值来判断通讯是否完成

uniapp代码:

<template>
	<view>
		<web-view  @message="message" :src="url+'#'+hash"></web-view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				url: '',
				hash:''
			}
		},
		onLoad: function(e) {
			this.url = e.url
		},
		methods: {
			message(e) {
				console.log(e)
				var msg = e.detail.data[0]
				console.log(msg)
				this.SendMessage(msg)
			},
			SendMessage(msg){
				this.hash = encodeURI(msg)
			}
		},
	}
</script>

 html代码 :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<!-- uni 的 SDK -->
<script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
<!--Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
<title>你好,华哥</title>
</head>
<body>
<span id="app">
<button class="btn btn-red" type="button" v-on:click="sendmessage">sendmessage</button>
{{ hash }}
</span>
<script>
if( ("onhashchange" in window) && ((typeof document.documentMode==="undefined") || document.documentMode==8)) {
    // 浏览器支持onhashchange事件
    window.onhashchange = hashChangeFire;  // TODO,对应新的hash执行的操作函数
} else {
    // 不支持则用定时器检测的办法
    setInterval(function() {
        var ischanged = isHashChanged();  // TODO,检测hash值或其中某一段是否更改的函数
        if(ischanged) {
            hashChangeFire();  // TODO,对应新的hash执行的操作函数
        }
    }, 150);
}
function hashChangeFire(){ getmessage() } 
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!',
    hash:''
  },
  // 在 `methods` 对象中定义方法
  methods: {
    sendmessage: function (event) {
        uni.postMessage({
            data: '你好华哥'
        });
        
    },
    getmessage: function (event) {
        this.hash = decodeURIComponent(window.location.hash.substring(1));
    }
  },
  created () {   // 在created ()里定义是为了确保vue组件加载完成后,再执行window 全局方法
    window.getmessage= this.getmessage  // 将vue中要被调用的方法定义成 window 全局方法
  },
})
</script>
</body>
</html>
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一挽春风十里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值