背景:官方文档中,h5端下是用非uniapp做的原生html+javascript做的h5页面,而我做的h5页面也是用uniapp做的,所以在h5端主动通知app端时,直接使用uni.postMessage会报无效。
1、app端
首先在webview原生页面通过$scope获取当前的webview页面,然后执行evalJs()来调用webview h5中的函数,比如下面这个例子就是调用h5中的 getVueMessage 自定义函数。
注意:需要等h5页面加载一段时间再去调用函数,否则有时会无法找到h5页面中的getVueMessage方法而报错,导致h5页面无法接收参数
<template> <view> <web-view :webview-styles="webviewStyles" ref="webview" :src="'https://tytrock.com/#/pages/index/h5_webview'" @message="callback"></web-view> </view> </template> <script> export default { data() { return { sysUser:unigetStorageSync('sysUser'), webviewStyles: { progress: { color: '#f99c34' } } } }, mounted() { //向h5端传递参数 let currentWebview = this.$scope.$getAppWebview(); let wv = currentWebview.children()[0]; let data = { token:uni.getStorageSync('token'), sysUser:this.sysUser } setTimeout(()=>{ wv.evalJS(`getVueMessage(${JSON.stringify(data)})`); },1000); }, methods: { //接收h5端方法 callback(e){ console.log(e); } } } } }
2、h5端
1)、下载webviewjs代码保存至本地 webview,资源url:https://unpkg.com/@dcloudio/uni-webview-js@0.0.3/index.js
2)、在main.js中引入webview.js
import uniwebview from '@/utils/webview.js'
3)、然后就可以在全局进行适用 uni.webview.postMessage进行发送消息
uni.webView.postMessage({ data: { id: 1, // 这是传的参数 }, });
参考:
https://blog.csdn.net/YhWyl527/article/details/131243288
https://blog.csdn.net/qq_36604863/article/details/125101143
本帖已被设为精华帖!