web-view實(shí)現(xiàn)app應(yīng)用與網(wǎng)頁(yè)的數(shù)據(jù)交互方式
一、網(wǎng)頁(yè)向app傳遞數(shù)據(jù)
1、在網(wǎng)頁(yè)項(xiàng)目的index.html頁(yè)面引入uniapp的js文件,引入成功之后就可以在事件里面使用uni.postMessage(網(wǎng)頁(yè)項(xiàng)目是用vue框架寫的)
<!-- uniapp 通信必須有的 --> <script type="text/javascript" src="https://unpkg.com/@dcloudio/uni-webview-js@0.0.2/index.js"></script> <script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script> <script> document.addEventListener('UniAppJSBridgeReady', function() { uni.getEnv(function(res) { console.log('當(dāng)前環(huán)境:' + JSON.stringify(res)); }); }); </script>
2、向app傳遞數(shù)據(jù),可以直接寫在點(diǎn)擊事件里面
uni.postMessage({ data: { action: 'scanCode' } })
二、app處理接收的數(shù)據(jù)并向網(wǎng)頁(yè)傳遞數(shù)據(jù)
1、app項(xiàng)目中引入網(wǎng)頁(yè)
<web-view @message="handleMessage" ref="webview" :src="url"></web-view>
2、handleMessage接收網(wǎng)頁(yè)傳過來(lái)的數(shù)據(jù)
handleMessage(event) { console.log("webView傳遞過來(lái)的消息:" + JSON.stringify(evt.detail.data)) // #ifdef APP-PLUS const currentWebview = this.$parent.$scope.$getAppWebview().children()[0] let data = event.detail.data.length>0?event.detail.data[0]:'' if (data&&data.action == "scanCode") { console.log('數(shù)據(jù)接收成功') // 進(jìn)行處理 } // #endif }
3、向網(wǎng)頁(yè)中傳遞數(shù)據(jù)
開發(fā)的時(shí)候使用this.$scope一直Cannot read property ‘$getAppWebview‘ of undefined,后來(lái)查找了很多才找到,組件內(nèi)要用this.$parent.$scope
如果web-view是放在組件里面的用下面的方法去獲取web-view窗口
//如果web-view就在當(dāng)前頁(yè)面里面,可以把$parent去掉 const currentWebview = this.$parent.$scope.$getAppWebview().children()[0] currentWebview.evalJS(`scanCode(${JSON.stringify(_data)})`);
注意:如果頁(yè)面沒有初始化完成,可以加個(gè)定時(shí)等初始化完成在調(diào)用
var currentWebview = this.$scope.$getAppWebview() //此對(duì)象相當(dāng)于html5plus里的plus.webview.currentWebview()。在uni-app里vue頁(yè)面直接使用plus.webview.currentWebview()無(wú)效 setTimeout(function() { wv = currentWebview.children()[0] }, 1000);
三、快速起服務(wù)測(cè)試
如果你想快速上手的話,可以直接建一個(gè)html頁(yè)面起本地服務(wù)
- 1、把index.html放到文件夾下
- 2、打開文件夾 shift+鼠標(biāo)右鍵,打開命令行
- 3、下載http-server: npm install http-server -g
- 4、開啟本地服務(wù)器,輸入 http-server 就可以了
- 5、關(guān)閉本地服務(wù)器,按快捷鍵 CTRL-C,當(dāng)顯示 ^Chttp-server stopped 的時(shí)候,就是關(guān)閉成功了
用http://192.168.0.8:8080 作為url引入到web-view里面
<web-view @message="handleMessage" ref="webview" src="http://192.168.0.8:8080 "></web-view>
- index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title>網(wǎng)絡(luò)網(wǎng)頁(yè)</title> <style type="text/css"> .btn { display: block; margin: 20px auto; padding: 5px; background-color: #007aff; border: 0; color: #ffffff; height: 40px; width: 200px; } .btn-red { background-color: #dd524d; } .post-message-section { visibility: hidden; } </style> </head> <body> <div class="post-message-section"> <div class="btn-list"> <button class="btn btn-red" type="button" id="postMessage">postMessage</button> </div> </div> <!-- uni 的 SDK --> <!-- uni.webview.1.5.4.js--> <script type="text/javascript" src="https://unpkg.com/@dcloudio/uni-webview-js@0.0.3/index.js"></script> <script type="text/javascript"> // 待觸發(fā) `UniAppJSBridgeReady` 事件后,即可調(diào)用 uni 的 API。 document.addEventListener('UniAppJSBridgeReady', function() { uni.postMessage({ data: { action: 'message' } }); uni.getEnv(function(res) { console.log('當(dāng)前環(huán)境:' + JSON.stringify(res)); }); document.getElementById('postMessage').addEventListener('click', function() { uni.postMessage({ data: { action: 'message' } }); }); }); </script> </body> </html>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
es6函數(shù)之尾調(diào)用優(yōu)化實(shí)例分析
這篇文章主要介紹了es6函數(shù)之尾調(diào)用優(yōu)化,結(jié)合實(shí)例形式分析了es6函數(shù)尾調(diào)用優(yōu)化相關(guān)功能、原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04Bootstrap的Refresh Icon也spin起來(lái)
本文通過實(shí)例給大家介紹Bootstrap的Refresh Icon相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-07-07JavaScript生成隨機(jī)數(shù)的各種方法大全
JavaScript 是一門強(qiáng)大的編程語(yǔ)言,在前端和后端開發(fā)中廣泛使用,生成隨機(jī)數(shù)是 JavaScript 開發(fā)中的常見需求,應(yīng)用場(chǎng)景包括游戲開發(fā)、驗(yàn)證碼生成、數(shù)據(jù)模擬等,本文將詳細(xì)介紹 JavaScript 中生成隨機(jī)數(shù)的各種方法,并分析其適用場(chǎng)景和優(yōu)缺點(diǎn),需要的朋友可以參考下2025-03-03關(guān)于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
下面小編就為大家?guī)?lái)一篇關(guān)于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-06-06微信小程序比較兩個(gè)數(shù)大小的實(shí)現(xiàn)方法
最近在工作中遇到一個(gè)需求,可以自動(dòng)對(duì)比兩個(gè)數(shù)的大小,下面這篇文章主要給大家介紹了關(guān)于微信小程序比較兩個(gè)數(shù)大小的實(shí)現(xiàn)方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03微信小程序購(gòu)物車、父子組件傳值及calc的注意事項(xiàng)總結(jié)
這篇文章主要給大家介紹了關(guān)于微信小程序購(gòu)物車、父子組件傳值及calc的注意事項(xiàng)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11TypeError: Cannot set properties of 
這篇文章主要介紹了TypeError: Cannot set properties of undefined (setting ‘xx‘)的問題,本文給大家分享完美解決方案,需要的朋友可以參考下2023-09-09JavaScript設(shè)置獲取和設(shè)置屬性的方法
這篇文章主要介紹了JavaScript設(shè)置獲取和設(shè)置屬性的方法,學(xué)會(huì)使用getAttribute、setAttribute的用法,需要的朋友可以參考下2015-03-03