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>
相关推荐
禾高网络2 小时前
开启环保新潮流:回收小程序系统功能介绍
java·大数据·小程序
2501_915921435 小时前
详细解析,iOS 应用上架 App Store 的完整流程与指南
android·ios·小程序·https·uni-app·iphone·webview
微三云 - 廖会灵 (私域系统开发)5 小时前
小程序商城系统安全运维剖析:漏洞、风控与长效迭代方案
运维·小程序·系统安全
元岳数字人小元5 小时前
易部署易运维!AI数字人一体机实现场景长效运营
运维·人工智能·人机交互·交互·源代码管理
T01156186 小时前
独立开发者商单实战|商超门店小程序(自提 + 同城配送):小程序全端页面 & 业务流程总图汇总
微信小程序·小程序·个人开发·前端实战
T01156186 小时前
独立开发者商单实战|商超门店小程序(自提 + 同城配送)用户端 & 后台联动踩坑上篇
小程序
梦想的颜色7 小时前
UniApp 四端对齐实战:iOS App / Android App / 小程序 / H5 兼容坑点与完整解决方案|AI 辅助多端落地
android·ios·小程序·uni‑app·uniapp 四端适配·多端兼容·ai 生成 uni‑app
波罗丁牌21 小时前
uni-app 实现视频聊天、屏幕分享,支持Android、HarmonyOS、iOS
android·uni-app·音视频
黄华SJ520it1 天前
二二复制定点裂变双轨商城系统开发:原理、架构与实战指南
运维·小程序·架构·系统开发
前端l1 天前
uni‑app(Vue3+setup)开发微信小程序高频坑汇总
微信·uni-app