• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    react native與webview通信的示例代碼

    來源:懂視網 責編:小采 時間:2020-11-27 22:29:10
    文檔

    react native與webview通信的示例代碼

    react native與webview通信的示例代碼:WebView是ReactNative中的組件 , 它可以創建一個原生的WebView,可以用于訪問一個網頁. 有時候我們需要在RN與WebView之間進行通信,或者進行數據傳遞,或者發送消息通知.這時候就要用以下知識了. 一:WebView向RN端發送數據: 首先,我們構建一個we
    推薦度:
    導讀react native與webview通信的示例代碼:WebView是ReactNative中的組件 , 它可以創建一個原生的WebView,可以用于訪問一個網頁. 有時候我們需要在RN與WebView之間進行通信,或者進行數據傳遞,或者發送消息通知.這時候就要用以下知識了. 一:WebView向RN端發送數據: 首先,我們構建一個we

    WebView是ReactNative中的組件 , 它可以創建一個原生的WebView,可以用于訪問一個網頁.

    有時候我們需要在RN與WebView之間進行通信,或者進行數據傳遞,或者發送消息通知.這時候就要用以下知識了.

    一:WebView向RN端發送數據:

    首先,我們構建一個webview:

    <WebView
     ref={'webview'}
     source={require('./index.html')}
     style={{width: 375, height: 220}}
     onMessage={(e) => {
     this.handleMessage(e)
     }}
     
    />

    可以看到其中有一個onMessage方法,

    onMessage function

    在webview內部的網頁中調用window.postMessage方法時可以觸發此屬性對應的函數,從而實現網頁和RN之間的數據交換。 設置此屬性的同時會在webview中注入一個postMessage的全局函數并覆蓋可能已經存在的同名實現。

    網頁端的window.postMessage只發送一個參數data,此參數封裝在RN端的event對象中,即event.nativeEvent.data。data只能是一個字符串。

    由此可見,這個方法是用來接收從Webview(也就是html)中傳來數據的方法.

    內部實現是對接收到的數據進行處理:

    handleMessage(e) {
     this.setState({webViewData: e.nativeEvent.data});
    }

    e.nativeEvent.data就是從webview內部發送過來的數據.

    光做這個還不 夠, 這只是Rn端的處理,我們還需要在html中寫一個發送數據的方法:

    var data = 0;
    
    function sendData(data) {
     if (window.originalPostMessage) {
     window.postMessage(data);
     } else {
     throw Error('postMessage接口還未注入');
     }
    }
    document.getElementById('button').onclick = function () {
     data += 100;
     sendData(data);
    }
    
    

    window.postMessage就是向RN發送數據.

    二: RN向Webview發送數據:

    首先定義一個發送數據的方法:

    sendMessage() {
     this.refs.webview.postMessage(++this.data);
    }

    這步很簡單 .
    直接把想發送的數據作為參數寫在這個方法里就好.

    然后, 在html中也要有相應的接收數據的方法:

    window.onload = function () {
     document.addEventListener('message', function (e) {
     document.getElementById('data').textContent = e.data;
     });
    
    }
    

    這就可以實現Rn與Webview之間的通信了.

    之后放上源碼:

    <!DOCTYPE html>
    <html lang="en">
    <head>
     <title></title>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    <body>
    <div style="text-align: center">
     <button id="button">發送數據到react native</button>
     <p style="text-align: center">收到react native發送的數據: <span id="data"></span></p>
    </div>
    <script>
     var data = 0;
    
     function sendData(data) {
     if (window.originalPostMessage) {
     window.postMessage(data);
     } else {
     throw Error('postMessage接口還未注入');
     }
     }
    
     window.onload = function () {
     document.addEventListener('message', function (e) {
     document.getElementById('data').textContent = e.data;
     });
     document.getElementById('button').onclick = function () {
     data += 100;
     sendData(data);
     }
     }
    </script>
    </body>
    </html>
    
    

    web.js:

    /**
     * Created by 卓原 on 2017/8/17.
     * zhuoyuan93@gmail.com
     */
    import React from 'react';
    import {
     View,
     Text,
     StyleSheet,
     WebView
    } from 'react-native';
    
    export default class Web extends React.Component {
    
     constructor(props) {
     super(props);
     this.state = {
     webViewData: ''
     }
     this.data = 0;
     }
    
     sendMessage() {
     this.refs.webview.postMessage(++this.data);
     }
    
     handleMessage(e) {
     this.setState({webViewData: e.nativeEvent.data});
     }
    
     render() {
     return (
     <View style={styles.container}>
     <View style={{width: 375, height: 220}}>
     <WebView
     ref={'webview'}
     source={require('./index.html')}
     style={{width: 375, height: 220}}
     onMessage={(e) => {
     this.handleMessage(e)
     }}
    
     />
    
     </View>
     <Text>來自webview的數據 : {this.state.webViewData}</Text>
     <Text onPress={() => {
     this.sendMessage()
     }}>發送數據到WebView</Text>
     </View>
     )
     }
    }
    
    const styles = StyleSheet.create({
     container: {
     flex: 1,
     marginTop: 22,
     backgroundColor: '#F5FCFF',
     },
    
    });
    
    

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    react native與webview通信的示例代碼

    react native與webview通信的示例代碼:WebView是ReactNative中的組件 , 它可以創建一個原生的WebView,可以用于訪問一個網頁. 有時候我們需要在RN與WebView之間進行通信,或者進行數據傳遞,或者發送消息通知.這時候就要用以下知識了. 一:WebView向RN端發送數據: 首先,我們構建一個we
    推薦度:
    標簽: 代碼 通信 React
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top 主站蜘蛛池模板: 四虎国产精品永久地址51| 九色精品视频在线观看| 国产精品无码专区在线观看| 国产精品原创巨作av女教师| 日韩美女18网站久久精品| 亚洲色图国产精品| 国产成人精品无码免费看 | 久久丫精品国产亚洲av| 久久激情亚洲精品无码?V| 四虎影视884a精品国产四虎| 国产午夜精品一区二区三区 | 激情亚洲一区国产精品| 欧美日韩精品一区二区视频| 国产A∨国片精品一区二区| 国产精品第13页| 国产精品国产三级国产AV主播| 亚洲国产精品成人久久蜜臀| 久久精品国产一区二区三区不卡 | 99久久99久久精品国产| 国产一区二区精品| 8AV国产精品爽爽ⅴa在线观看| 日韩精品乱码AV一区二区| 亚洲欧洲自拍拍偷精品 美利坚| 久久精品一区二区三区中文字幕 | 久久久久亚洲精品无码网址| 精品国产亚洲男女在线线电影| 国产成人精品久久亚洲高清不卡| 久久精品国产久精国产| 久久精品国产一区二区三区日韩| 91精品成人免费国产| 97精品国产手机| 国产精品合集一区二区三区| 大桥未久在线精品视频在线| heyzo高无码国产精品| 国产午夜精品久久久久免费视 | 无码人妻精品一区二区蜜桃百度 | 国产精品热久久无码av| 国产精品99久久不卡| 精品久久久久国产免费| 久久久91人妻无码精品蜜桃HD| 久久精品二区|