最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

uniapp?APP中內(nèi)嵌webview的H5與APP相互通訊動(dòng)態(tài)傳參代碼示例

 更新時(shí)間:2024年04月02日 09:16:58   作者:夕溯流光  
最近外部公司的app要接入我司的uni H5項(xiàng)目,所以這篇文章主要給大家介紹了關(guān)于uniapp?APP中內(nèi)嵌webview的H5與APP相互通訊動(dòng)態(tài)傳參的相關(guān)資料,需要的朋友可以參考下

概要

在使用uni-app開(kāi)發(fā)app的過(guò)程中使用到公司其他項(xiàng)目h5的頁(yè)面,app項(xiàng)目中使用了web-view來(lái)進(jìn)行內(nèi)嵌,h5項(xiàng)目中核心功能是調(diào)用掃一掃進(jìn)行掃碼,由于h5本身基于微信開(kāi)發(fā),可以直接調(diào)用 this.$wx.scanQRCode()實(shí)現(xiàn)掃一掃功能,但通過(guò)web-view嵌入app中,無(wú)法使用微信環(huán)境,導(dǎo)致直接調(diào)用攝像頭失敗,點(diǎn)擊沒(méi)有反應(yīng)。

思路

后面看到web-view可以跟應(yīng)用進(jìn)行交互,于是想到從這里入手應(yīng)該可以解決。h5調(diào)用app中的uni.scanCode(),拿到結(jié)果后回傳h5內(nèi),即實(shí)現(xiàn)了app內(nèi)嵌h5的掃碼需求。

代碼

1.因?yàn)閔5需要向app發(fā)送事件,所以需要引入對(duì)應(yīng)的webview.js文件。這是基礎(chǔ)。uniapp官方文檔下載uni.webview.1.5.4.js到本地,在h5項(xiàng)目的main.js中全局引入

h5的main.js

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

2.在h5頁(yè)面 methods調(diào)用uni.webView.postMessage向app傳參,mounted 里通過(guò)使用監(jiān)聽(tīng)app中使用的evalJs()方法接收app傳過(guò)來(lái)的參數(shù),

h5的index.vue

  mounted() {
  //document.addEventListener() 方法用于向文檔添加事件句柄,即事件監(jiān)聽(tīng)。當(dāng)相應(yīng)的事件發(fā)生了,就執(zhí)行對(duì)應(yīng)的函數(shù)。
            document.addEventListener("getAppMsg", (e) => {
                //webview接收uniapp傳過(guò)來(lái)的信息
                console.log('getAppMsg', e.detail.code)
            }, false)
        },
 methods: {
            testScan() {
               //h5向app傳參,觸發(fā)事件
                uni.webView.postMessage({
                    data: {
                        action: 'scanCode',
                    }
                })
            }
            }

3.app的內(nèi)嵌webview頁(yè)面中,在 的 message 事件回調(diào)event.detail.data中接收H5發(fā)送給App的信息;通過(guò)拿到webview的內(nèi)部對(duì)象,去調(diào)用系統(tǒng)的evalJS方法,傳入字符串,將該方法內(nèi)部的字符串在webview的H5中當(dāng)做js代碼去執(zhí)行。

app的scanCode.vue

//template
   <web-view :src="src" @message="message"></web-view>

//script
onLoad() {
            
            let height = 0; //定義動(dòng)態(tài)的高度變量
            let statusbar = 0; // 動(dòng)態(tài)狀態(tài)欄高度
            uni.getSystemInfo({ // 獲取當(dāng)前設(shè)備的具體信息
                success: (sysinfo) => {
                    statusbar = sysinfo.statusBarHeight + 55;
                    height = sysinfo.windowHeight - 65;
                    console.log("高度", statusbar, height)
                }
            });
            // #ifdef APP-PLUS
            let currentWebview = this.$mp.page.$getAppWebview(); //獲取當(dāng)前web-view 
            let that = this
            setTimeout(function() {
                that.wv = currentWebview.children()[0];
                that.wv.setStyle({ //設(shè)置web-view距離頂部的距離以及自己的高度,單位為px
                    top: statusbar, //此處是距離頂部的高度,應(yīng)該是你頁(yè)面的頭部
                    height: height, //webview的高度
                })
            }, 200); //如頁(yè)面初始化調(diào)用需要寫(xiě)延遲
            // #endif
        },
  methods: {
            message(e) {
                //接收H5發(fā)送給app的消息      
                // e.detail.data即為H5中uni.webView.postMessage()的data的內(nèi)容
                let mesg = e.detail.data[0]
                console.log("mesg", mesg)
                if (mesg.action == "scanCode") {
                    // 允許從相機(jī)和相冊(cè)掃碼
                    uni.scanCode({
                        onlyFromCamera: true, //只允許通過(guò)相機(jī)掃碼
                        scanType: ['qrCode'], //調(diào)起條碼掃描
                        autoDecodeCharset: true,
                        success: (res) => {
                            console.log(`res=${res.result}`) //res.result為掃碼結(jié)果
                            this.wv.evalJS( 
  "document.dispatchEvent(new CustomEvent('getAppMsg',{detail: {code:" +JSON.stringify(res.result) + "}}))"
                            )
          //通過(guò)evalJS(),傳入方法字符串,將該方法內(nèi)部的字符串在webview的H5中當(dāng)做js代碼去執(zhí)行。
          //document.dispatchEvent()為創(chuàng)建自定義事件在h5中執(zhí)行
            							}
            							})
            		}
            }
       }

至此,完成了app與h5之間的動(dòng)態(tài)傳參通信

總結(jié)

到此這篇關(guān)于uniapp APP中內(nèi)嵌webview的H5與APP相互通訊動(dòng)態(tài)傳參的文章就介紹到這了,更多相關(guān)uniapp APP中H5與APP動(dòng)態(tài)傳參內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue+echarts封裝氣泡圖的方法

    vue+echarts封裝氣泡圖的方法

    這篇文章主要為大家詳細(xì)介紹了vue+echarts封裝氣泡圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Vue.js實(shí)現(xiàn)一個(gè)漂亮、靈活、可復(fù)用的提示組件示例

    Vue.js實(shí)現(xiàn)一個(gè)漂亮、靈活、可復(fù)用的提示組件示例

    這篇文章主要介紹了Vue.js實(shí)現(xiàn)一個(gè)漂亮、靈活、可復(fù)用的提示組件示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Vue項(xiàng)目首屏性能優(yōu)化組件實(shí)戰(zhàn)指南

    Vue項(xiàng)目首屏性能優(yōu)化組件實(shí)戰(zhàn)指南

    Vue眾所周知是一個(gè)輕量級(jí)的框架,源碼僅僅為72.9KB,但是也有它自己的缺點(diǎn),就是首屏加載會(huì)比較慢,這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目首屏性能優(yōu)化組件的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題解決辦法

    Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題解決辦法

    最近項(xiàng)目更新頻繁,每次一更新客戶(hù)都說(shuō)還跟之前的一樣,一查原因是因?yàn)榭蛻?hù)沒(méi)有清空瀏覽器的緩存,所以為了方便客戶(hù)看到最新版本,開(kāi)始調(diào)研再發(fā)布新版本后自動(dòng)清理緩存,這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目每次發(fā)版后要清理瀏覽器緩存問(wèn)題的解決辦法,需要的朋友可以參考下
    2024-02-02
  • vue使用xlsx導(dǎo)入到表格中示例代碼

    vue使用xlsx導(dǎo)入到表格中示例代碼

    這篇文章主要介紹了vue使用xlsx導(dǎo)入到表格中代碼,具體實(shí)現(xiàn)是先通過(guò)FileReader將上傳的文件讀取為二進(jìn)制數(shù)據(jù),然后使用xlsx將它解析成JSON數(shù)據(jù),最后將JSON數(shù)據(jù)填充到表格中,需要的朋友可以參考下
    2023-11-11
  • vue項(xiàng)目使用定時(shí)器每隔幾秒運(yùn)行一次某方法代碼實(shí)例

    vue項(xiàng)目使用定時(shí)器每隔幾秒運(yùn)行一次某方法代碼實(shí)例

    有時(shí)候在項(xiàng)目中我們經(jīng)常需要設(shè)置簡(jiǎn)單的倒計(jì)時(shí)功能,這個(gè)可以通過(guò)定時(shí)器來(lái)實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目使用定時(shí)器每隔幾秒運(yùn)行一次某方法的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • vue.js表單驗(yàn)證插件(vee-validate)的使用教程詳解

    vue.js表單驗(yàn)證插件(vee-validate)的使用教程詳解

    這篇文章主要介紹了vue.js表單驗(yàn)證插件(vee-validate)的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue中輪訓(xùn)器的使用

    vue中輪訓(xùn)器的使用

    今天小編就為大家分享一篇關(guān)于vue中輪訓(xùn)器的使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 如何解決ElementPlus的el-table底白線(xiàn)問(wèn)題

    如何解決ElementPlus的el-table底白線(xiàn)問(wèn)題

    這篇文章主要介紹了如何解決ElementPlus的el-table底白線(xiàn)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 如何正確快速使用Vue中的插槽和配置代理

    如何正確快速使用Vue中的插槽和配置代理

    這篇文章主要介紹了正確快速使用Vue中的插槽和配置代理的相關(guān)知識(shí),插槽分為三種,分別是默認(rèn)插槽、具名插槽、作用域插槽,下面分別列出了如何使用這三種插槽,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

东源县| 霍城县| 石台县| 崇文区| 宁强县| 呼伦贝尔市| 泽州县| 遂川县| 碌曲县| 木里| 重庆市| 嘉峪关市| 兴安县| 灵璧县| 利川市| 泸水县| 新和县| 交口县| 娱乐| 拉萨市| 师宗县| 贺州市| 铁岭县| 唐海县| 民县| 武陟县| 五大连池市| 宜川县| 六安市| 阿拉善右旗| 常州市| 郁南县| 响水县| 朝阳县| 祁阳县| 石家庄市| 安宁市| 长葛市| 观塘区| 新邵县| 迭部县|