uniapp 在app和小程序端使用webview进行数据交互

结论:app端支持比较好可以做到实时传递,微信小程序支持比较差,小程序向url传参只能通过url,url向app传参需要特定时机(后退、组件销毁、分享、复制链接)触发才能收到消息。

以下是代码

  1. app端(需要使用nvue)

    <template>  
        <view class="webview-box">  
                <button style="z-index: 999;" @click="handlePostMessage('app向url传值')">点击向url传值</button>
                <web-view ref="webview" class="webview" src="http://192.168.18.103:8080/index?os=wx" @onPostMessage="PostMessage"></web-view>  
            </view>  
    </template>  
    <script>  
        export default {  
            data() {  
                return {  
                                    url:'http://192.168.18.103:8080/index?os=wx'
                }  
            },  
            onLoad() {  
                        this.url += '&t=' + new Date().getTime()
            },  
            methods: {  
                // 接收h5页面发来的键值判断需要执行的操作  
                PostMessage(evt) {  
                    console.log("postMessage: ", evt)
                                    uni.showModal({
                                        title:"提示",
                                        content:evt.detail.data[0].msg
                                    })
                },  
                // 获取到对应webview(关键)通过evalJs(注意大小写,如果不知道evalJ是什么,可自行百度) 执行网页的函数,可对其进行传参,完成与网页的通讯  
                handlePostMessage(res) {  
                                console.log("22")
                    this.$refs.webview.evalJs(`handleMessage('${res}')`);  
                }  
            }  
        }  
    </script>  
    
    <style>  
        .webview-box {  
            position: absolute;  
            left: 0px;  
            right: 0px;  
            top: 0px;  
            bottom: 0px;  
        }  
    
        .webview {  
            flex: 1; 
                     height: 300rpx;
        }  
    </style> 
    
  2. 微信小程序端(正常vue格式)

    <template>  
        <view class="webview-box">  
                <web-view ref="webview" class="webview" :src="url" @onPostMessage="PostMessage" @message="PostMessage"></web-view>  
            </view>  
    </template>  
    <script>  
        export default {  
            data() {  
                return {  
                                    url:'http://192.168.18.103:8080/index?os=wx'
                }  
            },  
            onLoad() {  
                        this.url += '&t=' + new Date().getTime()
            },  
            methods: {  
                // 接收h5页面发来的键值判断需要执行的操作  
                PostMessage(evt) {  
                    console.log("postMessage1: ", evt)  
                },  
                // 获取到对应webview(关键)通过evalJs(注意大小写,如果不知道evalJ是什么,可自行百度) 执行网页的函数,可对其进行传参,完成与网页的通讯  
                handlePostMessage(res) {  
                                console.log("22")
                }  
            }  
        }  
    </script>  
    
    <style>  
        .webview-box {  
            position: absolute;  
            left: 0px;  
            right: 0px;  
            top: 0px;  
            bottom: 0px;  
        }  
    
        .webview {  
            flex: 1; 
                     height: 300rpx;
        }  
    </style> 
    

    3、html端

    <!doctype html>
    <html lang="ch" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no,viewport-fit=cover">
        <title>默认的title</title>
        <!-- 微信 JS-SDK 如果不需要兼容小程序,则无需引用此 JS 文件。 -->  
        <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>  
        <!-- uni 的 SDK,必须引用。 -->  
        <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>
    
        <body>
            <div id="box"></div>
            <div class="btn" >点击1</div>
            <button id="to_shiming">向上传递数据</button>
           
        </body>
        <script>  
                
            // 在引用依赖的文件后,需要在 HTML 中监听 UniAppJSBridgeReady 事件触发后,才能安全调用 uni 的 API。  
            document.addEventListener('UniAppJSBridgeReady', function() {
    
            // 下面就是js知识了,点击某个按钮后发消息。
            document.getElementById('to_shiming').addEventListener('click', function() {
    
                // 这里调用uniapp的api执行消息发送
                uni.postMessage({
                    data: {
                        msg:'url向app传值'
                    }
                });
            });
            });
            window.handleMessage = function(msg){
                console.log("接收到消息",msg);
                alert("接收到消息"+msg);
                document.getElementById('box').innerText = msg;
                        }
    
        </script>
    </head>
        
    
    </html>
    
相关推荐
小咕聊编程1 小时前
【含文档+PPT+源码】基于微信小程序连锁药店商城
微信小程序·小程序
低代码布道师2 小时前
家政预约小程序11分类展示
低代码·小程序
说私域2 小时前
基于开源2 + 1链动模式AI智能名片S2B2C商城小程序的内容创作与传播效能探究
人工智能·小程序·开源
小咕聊编程12 小时前
【含文档+PPT+源码】基于微信小程序农家乐美食餐厅预约推广系统
微信小程序·小程序·美食
计算机-秋大田21 小时前
基于微信小程序的电子竞技信息交流平台设计与实现(LW+源码+讲解)
spring boot·后端·微信小程序·小程序·课程设计
计算机徐师兄1 天前
Java基于SSM框架的互助学习平台小程序【附源码、文档】
小程序·互助学习·互助学习平台小程序·java互助学习微信小程序·互助学习微信小程序·互助学习平台微信小程序
西农小陈1 天前
Python-基于PyQt5,wordcloud,pillow,numpy,os,sys的智能词云生成器
开发语言·python·小程序·pycharm·numpy·pyqt·pillow
说私域1 天前
开源AI智能名片2+1链动模式S2B2C商城小程序:重塑私域流量运营格局
人工智能·小程序·流量运营
林涧泣1 天前
【Uniapp-Vue3】解决uni-popup弹窗在安全区显示透明问题
前端·vue.js·uni-app
明教卢师傅1 天前
JavaScript前后端交互-AJAX/fetch
javascript·ajax·交互