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 小时前
高校宿舍信息管理系统小程序
小程序·宿舍管理小程序
说私域2 小时前
基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究
人工智能·小程序·零售
断墨先生4 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
天郁青4 小时前
数据库交互的本地项目:后台管理系统
数据库·交互
guai_guai_guai5 小时前
uniapp
前端·javascript·vue.js·uni-app
梓贤Vigo6 小时前
【Axure高保真原型】2级下钻条形图
交互·产品经理·axure·原型·中继器
不收藏找不到我10 小时前
浏览器交互事件汇总
前端·交互
阿伟来咯~11 小时前
一些 uniapp相关bug
uni-app·bug
梓贤Vigo12 小时前
【Axure高保真原型】PDF阅读器
交互·产品经理·axure·原型·中继器
梓贤Vigo12 小时前
【Axure视频教程】多选按钮控制元件显示和隐藏
交互·产品经理·axure·原型·中继器