android rn 和webview,RN Webview與Web的通信與調試

React Native Version:0.51

RN 在 0.37 版本中加入了WebView功能,所以想要在使用WebView,版本必須>=0.37,發送的 message 只能是字符串,所以需要將其他格式的數據轉換成字符串,在接收到后再轉換回去,其實直接用JSON.stringify和JSON.parse就可以

加載 html

source屬性用于指定加載的 html,可以加載在線的頁面,也可以加載本地的頁面,代碼如下:

// 加載線上頁面

source={{uri: 'http://www.mi.com'}}

/>

// 加載本地html文件

source={require('../src/html/index.html')}

/>

注意 ??

在 RN 中可以加載 WebView,但是無法調試,也不能使用 alert 來驗證代碼 js 代碼是否運行成功,只能通過往 html 寫入東西(innerHTML)來驗證 js 是否運行成功

WebView 與 html 的通信

webview 發送信息到 html

WebView 給 html 發送信息需要使用postMessage,而 html 接收 RN 發過來的信息需要監聽message事件,代碼如下:

// RN

class WebViewExample extends Component {

onLoadEnd = () => {

this.refs.webview.postMessage = 'this is RN msg'

}

render() {

return (

ref="webview"

source={require('../html/index.html')}

onLoadEnd={this.onLoadEnd}

/>

)

}

}

export default WebViewExample

// web

window.document.addEventListener('message', function(e) {

const message = e.data

})

這里需要注意一點

postMessage需要在 webview 加載完成之后再去 post,如果放在commponentWillMount里由于頁面沒有加載完成就 post 信息,會導致 html 端無法監聽到 message 事件。

html 發送信息到 webview

// RN

class WebViewExample extends Component {

handleMessage = e => {

const message = e.nativeEvent.data

}

render() {

return (

ref="webview"

source={require('../html/index.html')}

onMessage={e => this.handleMessage(e)}

/>

)

}

}

export default WebViewExample

// web

window.postMessage('this is html msg')

debug

RN 中 debug webview 和安卓開發中看起來是差不多的,連接好設備后,在 chrome 中輸入

chrome://inspect

就可以看到安卓設備上正在運行的 webview 了,點擊inspect就會開啟一個調試頁面,就可以進行 debug 了,RN 似乎默認開啟了 debug 調試,直接就可以看到 webview 中輸出的信息。

abc62e13c12d

webview_debug.png

但是我發現我打開的調試界面是一個錯亂的界面,不知道為什么,無奈。

abc62e13c12d

debug界面.jpeg

注意 ??

這里需要注意一點的,由于安卓版本的差異,所以內部的 webview 對 js 的支持程度也不同,為了保證兼容性,如果使用了 ES6,請轉成 ES5,否則會報錯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫完整性檢查

為了主動發現數據庫側頁損壞,保證數據庫邏輯和物理完整性,計劃每周六上午6點,針對生產主庫上的所有系統和用戶數據庫執行DBCC CHECKDB,將結果記錄到表中。以下為理論依據:SQL Server數據庫可以檢測出頁損壞&#xff0c…

GNU概念

一、GNU的意思 GNU的全稱:GNU is not unix,意思是:GNU 不是 unix 問:為什么這樣取名? 答:為了打造一個不是unix又類unix的系統 二、GNU的歷程 GNU計劃是由Richard Stallman 在1984年公開發起的&#x…

Item 13 Minimize the accessibility of classes and members

區分好的模塊和不好的模塊最重要的因素是看這個模塊對于其他模塊而言是否隱藏內部數據和其他細節。好的模塊會把所有細節隱藏起來,把API和實現隔離開來,模塊之間用API通信。這就是information hiding或者封裝(encapsulation)。是軟件設計基本原則之一。 …

html 物流狀態,使用css實現物流進度的樣式的實例代碼

效果:css樣式:ul li {list-style: none;}.package-status {padding: 18px 0 0 0}.package-status .status-list {margin: 0;padding: 0;margin-top: -5px;padding-left: 8px;list-style: none;}.package-status .status-list>li {border-left: 2px so…

GPL概念

一、GPL概念 全稱為 General Public License,翻譯為通用公共許可,是最著名的開源許可協議。Linux內核就是在GPL許可下發布的,GPL許可是由自由軟件基金會Free Software foundation 創建的,由Richard Stallman 和一幫人共同努力發起…

點鈔機語音怎么打開_原來微信語音一樣能轉發? 居然還有人不知道

微信怎么把語音轉發給別人?原來這個簡單啊,微信作為一款我們最常用的社交工具,無論是生活還是工作過程中,我們都能夠用到微信。那么大家知道微信怎么把語音轉發給別人嗎?有的人肯定就會回答說:"跟轉發…

圓與平面的接觸面積_視頻:5.3RJ六年級上冊圓的面積例題+習題講解

一、什么是面積物體表面的大小就是它們的面積。長方形的面積長寬正方形的面積邊長邊長平行四邊形的面積底高三角形的面積底高2梯形的面積(上底下底)高2圓所占平面的大小叫做圓的面積。二、剪切法推導圓的面積把圓轉化成近似的長方形,當平均分成的份數越來越多&#…

Reactjs 踏坑指南1: 一些概念

Reactjs 踏坑指南1: 知識點 什么是React虛擬DOMJSX組件生命周期和狀態事件單項數據流Reactjs和Angularjs的對比React簡介 React是一個Facebook開發的UI庫。使用這個庫可以很方便的開發交互式的、具有表達力的和可重用的UI組件。本身并不是一個框架,可視為…

Linux為什么受歡迎?

1、Linux以高效和靈活著稱,實現了幾乎全部的Unix特性,同時具備多任務,多用戶的能力,支持多線程,多CPU架構。 2、Linux操作系統軟件包:包含了文本編輯器,高級語言編譯器,以及X-Windo…

直播的學習與使用-----采集

// 捕獲音視頻 - (void)setupCaputureVideo { // 1.創建捕獲會話,必須要強引用,否則會被釋放 AVCaptureSession *captureSession [[AVCaptureSession alloc] init]; _captureSession captureSession; // 2.獲取攝像頭設備,默認是后置攝像頭 AVCaptureD…

html css js編程順序,html css js先學哪個呢?

前端開發三劍客為 HTML、CSS、JavaScript。這三門語言的掌握對前端開發程序員來說是必須的,但有不少同學不懂得先學習哪一門語言。那么這篇文章 w3cschool 小編就來為你解答一下 HTML、CSS、JavaScript 先學哪個的問題。首先需要學習的是 HTML,HTML 是開…

蘋果手機收不到推送信息_iPhone手機收不到正式版系統更新推送怎么辦?(附解決方法)...

有不少熱衷于升級系統的小伙伴,希望在第一時間升級到最新版 iOS 系統進行體驗,但難免也會遇到無法收到更新推送的問題。主要有以下原因。iPhone手機收不到正式版系統更新推送怎么辦?網絡狀況不佳如果當前網絡狀況不好,可能無法收到來自蘋果官…

Linux系統特點介紹集合

1、開源代碼程序,可自由修改。 2、Unix系統兼容,具備Unix幾乎所有優秀特性,同Unix指令集。 3、可自由傳播,無任何商業版權制約。 4、適合Intel等x86 CPU系列架構的計算機。 5、一個完善的多用戶,多任務&#xff0c…

火狐 移動 html 元素,python中的Firefox+Selenium:如何交互式地獲取元素html?

Im使用PythonSeleniumSplinterFirefox創建一個交互式web爬蟲。在python腳本提供了選項,然后Selenium打開Firefox并發送一些命令。在現在,我需要讓python腳本知道用戶想要與之交互的web元素。在我目前使用的方法是:Right-click the item in th…

瘦子的腸道菌群和胖子的區別_瘦子和病態肥胖患者腸道菌群組成和潛在功能的顯著差異...

10.1111/joim.1313707-07, ArticleAbstract & Authors:展開Abstract:收起Introduction:The gut microbiome may contribute to the development of obesity. So far, the extent of microbiome variation in people with obesity has not been determined in large cohorts…

Centos下載地址

下載地址: 從阿里鏡像網站上下載 http://mirrors.aliyun.com/centos/ 建議選用Centos 6.x windows電腦配置:至少4G內存,i5處理器或以上。 Linux虛擬機分配:內存128M~1024M,cpu 1核心,硬盤8g即可。

html分塊時邊距的設置,html – 文本節點后第一個塊的邊距(垂直空間)?

我不確定你是否會認為這是對你的問題的完整答案,因為我知道你正在使用< td>在您的示例中,< td>之間存在一個差異.和< dd>或者< li>元素是< td>的事實.在不破壞< table>的情況下,元素不能與其周圍元素相抵消具體行為.但至少我可以回答你的第…

實現連麥_微信重磅更新,視頻號直播連麥打賞美顏上線,新增巨大流量入口

12月23日晚&#xff0c;微信迎來重大改版&#xff01;在最新7.0.20版本的微信中&#xff0c;視頻號大招不斷&#xff0c;不僅上線了連麥功能&#xff0c;支持美顏瘦臉、打賞等功能。此外&#xff0c;微信還給視頻號開放了兩個重大入口&#xff0c;包括微信個人名片和“發現”ta…

VMware Workstation 網絡設置解釋三種

一、NAT Network Address Translation&#xff0c;網絡地址轉換&#xff0c;NAT模式是比較簡單的實現虛擬機上網的方式&#xff0c;NAT模式的虛擬機時通過物理電腦上網和交換數據的。 在NAT模式下&#xff0c;虛擬機的網卡連接到物理機的VMware上&#xff0c;此時VMware軟件的…