uniapp?APP中内嵌webview的H5与APP相互通讯动态传参代码示例

uniapp?APP中内嵌webview的H5与APP相互通讯动态传参代码示例

码农世界 2024-05-29 前端 79 次浏览 0个评论

教程下载地址: 网赚博客https://www.piaodoo.com/创业项目排行榜前十名https://www.piaodoo.com/

目录
  • 概要
  • 思路
  • 代码
  • 总结

    概要

    在使用uni-app开发app的过程中使用到公司其他项目h5的页面,app项目中使用了web-view来进行内嵌,h5项目中核心功能是调用扫一扫进行扫码,由于h5本身基于微信开发,可以直接调用 this.$wx.scanQRCode()实现扫一扫功能,但通过web-view嵌入app中,无法使用微信环境,导致直接调用摄像头失败,点击没有反应。

    思路

    后面看到web-view可以跟应用进行交互,于是想到从这里入手应该可以解决。h5调用app中的uni.scanCode(),拿到结果后回传h5内,即实现了app内嵌h5的扫码需求。

    代码

    1.因为h5需要向app发送事件,所以需要引入对应的webview.js文件。这是基础。uniapp官方文档下载uni.webview.1.5.4.js到本地,在h5项目的main.js中全局引入

    h5的main.js

    // #ifdef H5
    // 引入uni.webview.1.5.4.js
    import '@/mixin/uni.webview.1.5.4.js';
    // #endif
    

    2.在h5页面 methods调用uni.webView.postMessage向app传参,mounted 里通过使用监听app中使用的evalJs()方法接收app传过来的参数,

    h5的index.vue

      mounted() {
      //document.addEventListener() 方法用于向文档添加事件句柄,即事件监听。当相应的事件发生了,就执行对应的函数。
                document.addEventListener("getAppMsg", (e) => {
                    //webview接收uniapp传过来的信息
                    console.log('getAppMsg', e.detail.code)
                }, false)
            },
     methods: {
                testScan() {
                   //h5向app传参,触发事件
                    uni.webView.postMessage({
                        data: {
                            action: 'scanCode',
                        }
                    })
                }
                }
    

    3.app的内嵌webview页面中,在 的 message 事件回调event.detail.data中接收H5发送给App的信息;通过拿到webview的内部对象,去调用系统的evalJS方法,传入字符串,将该方法内部的字符串在webview的H5中当做js代码去执行。

    app的scanCode.vue

    //template
       
    

    //script

    onLoad() {

            let height = 0; //定义动态的高度变量
            let statusbar = 0; // 动态状态栏高度
            uni.getSystemInfo({ // 获取当前设备的具体信息
                success: (sysinfo) => {
                    statusbar = sysinfo.statusBarHeight + 55;
                    height = sysinfo.windowHeight - 65;
                    console.log("高度", statusbar, height)
                }
            });
            // #ifdef APP-PLUS
            let currentWebview = this.$mp.page.$getAppWebview(); //获取当前web-view 
            let that = this
            setTimeout(function() {
                that.wv = currentWebview.children()[0];
                that.wv.setStyle({ //设置web-view距离顶部的距离以及自己的高度,单位为px
                    top: statusbar, //此处是距离顶部的高度,应该是你页面的头部
                    height: height, //webview的高度
                })
            }, 200); //如页面初始化调用需要写延迟
            // #endif
        },
    

    methods: {

    message(e) {

    //接收H5发送给app的消息

    // e.detail.data即为H5中uni.webView.postMessage()的data的内容

    let mesg = e.detail.data[0]

    console.log(“mesg”, mesg)

    if (mesg.action == “scanCode”) {

    // 允许从相机和相册扫码

    uni.scanCode({

    onlyFromCamera: true, //只允许通过相机扫码

    scanType: [‘qrCode’], //调起条码扫描

    autoDecodeCharset: true,

    success: (res) => {

    console.log(res=${res.result}) //res.result为扫码结果

    this.wv.evalJS(

    “document.dispatchEvent(new CustomEvent(‘getAppMsg’,{detail: {code:” +JSON.stringify(res.result) + “}}))”

    )

    //通过evalJS(),传入方法字符串,将该方法内部的字符串在webview的H5中当做js代码去执行。

    //document.dispatchEvent()为创建自定义事件在h5中执行

    }

    })

    }

    }

    }

    至此,完成了app与h5之间的动态传参通信

    总结

    到此这篇关于uniapp APP中内嵌webview的H5与APP相互通讯动态传参的文章就介绍到这了,更多相关uniapp APP中H5与APP动态传参内容请搜索网赚博客https://www.piaodoo.com/以前的文章或继续浏览下面的相关文章希望大家以后多多支持网赚博客https://www.piaodoo.com/!

                            友情连接:  
    

    茂名一技http://www.szsyby.net/

    茂名一技http://www.enechn.com/

    美文集http://www.tpyjn.cn/

    手游排行前十名http://www.bjkhrx.com/

    蔚来汽车http://www.weilaiqiche.cn/

转载请注明来自码农世界,本文标题:《uniapp?APP中内嵌webview的H5与APP相互通讯动态传参代码示例》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,79人围观)参与讨论

还没有评论,来说两句吧...

Top