美文网首页
组件:WebView

组件:WebView

作者: 沐风雨木 | 来源:发表于2017-08-02 15:14 被阅读32次

    创建一个原生的WebView,可以用于访问一个网页。

    一、基本用法

    1.基础用法

    <View style={{flex: 1, backgroundColor: 'white'}}>
        <WebView
        ref={WEBVIEW_REF}
        source={{uri: webUrl}}
        onMessage={this.handMessage}
        //是否支持javascript
        javaScriptEnabled={true}
        //设置是否要把网页缩放到适应视图的大小,以及是否允许用户改变缩放比例。
        scalesPageToFit={true}
        //加载状态显示
        startInLoadingState={true}/>
    </View>
    

    2.常用属性

    source {uri: string, method: string, headers: object, body: string}, {html: string, baseUrl: string}, number 
    在WebView中载入一段静态的html代码或是一个url(还可以附带一些header选项)。
    
    scalesPageToFit bool 
    设置是否要把网页缩放到适应视图的大小,以及是否允许用户改变缩放比例。
    
    startInLoadingState bool 
    强制WebView在第一次加载时先显示loading视图。默认为true。
    
    onMessage function
    在webview内部的网页中调用window.postMessage方法时可以触发此属性对应的函数,从而实现网页和RN之间的数据交换。 设置此属性的同时会在webview中注入一个postMessage
    的全局函数并覆盖可能已经存在的同名实现。网页端的window.postMessage只发送一个参数data,此参数封装在RN端的event对象中,即event.nativeEvent.data。
    data 只能是一个字符串。
    
    onError function 
    加载失败时调用。
    
    onLoad function 
    加载成功时调用。
    
    onLoadEnd function 
    加载结束时(无论成功或失败)调用。
    
    onLoadStart function 
    加载开始时调用。
    

    其他属性,见中文网:http://reactnative.cn/docs/0.46/webview.html#scalespagetofit

    3.遇到的坑

    1.在<View/>中添加<WebView/>一定要设置布局的大小,否则就会出现空白页面。

    二、WebView与React Native通信

    1.webView向ReactNative发送消息

    RN端:

    <WebView/>中代码:
     <WebView
            ref={w => this.webview = w}
            onMessage={this.handleMessage}
     />
    方法中代码:
     handleMessage = (event) => {
            const urlMessage = event.nativeEvent.data
           //TODO 取到值,之后的操作
    
        }
    

    网页端:
    function()方法里:window.postMessage只发送一个参数data,data 只能是一个字符串。
    可能在编写代码的时候window.后面找不到postMessage这个方法,但是可以大胆的写上去,之后测试便知。

    1.ReactNative向webView发送消息

    RN端:

    在该组件(页面)渲染完毕,WebView的 ref 属性执行之后,在组件(页面)中的任何地方使用this.webview.postMessage向WebView中的页面发送消息。

    this.webview.postMessage(message)
    

    网页端:
    监听从React Native发过来的消息:

    window.document.addEventListener('message', function (e) {
        const message = e.data
    })
    

    本篇记录本人写代码时遇到的坑和一些不明白的地方,如果是更复杂的React Native与WebView 通信,请参考http://www.jianshu.com/p/b37ee000379e

    相关文章

      网友评论

          本文标题:组件:WebView

          本文链接:https://www.haomeiwen.com/subject/ewpelxtx.html