美文网首页iOS工程实践
react-native webView加载网页问题

react-native webView加载网页问题

作者: sybil052 | 来源:发表于2017-11-14 14:45 被阅读1620次

    现在有这么一个需求,app的界面上需要加载一个二维码,但是后台不能返回图片地址,只能返回一个网页地址,怎么实现?
    很多人会说当然是用webView加载网页啦,webView支持载入一段静态的html代码或是一个url。这时,问题来了,怎么让二维码居中显示在手机界面上呢?
    我想到了以下几种方案:

    • 方法一:仿照web前端的实现方法,自己写一段html代码,用iframe标签加载网页的url;
    • 方法二:从网页的url界面中拿到二维码图片的地址,直接加载图片;
    • 方法三:使用webView中injectedJavaScript属性,重写网页的css样式;

    下面我们来分析下三种方法~

    方法一

    先上代码:

    ...
    let html = '<div style="height: 300px">'
                + '<iframe width="100%" height="100%" src="网页地址"></iframe>'
                + '</div>';
    ...
        <View style={styles.imageView}>
            <WebView
                 style={{
                     height: 150,
                     width: 150,
                     alignItems: 'center',
                 }}
                 source={{html: html}}
                 javaScriptEnabled={true}
                 domStorageEnabled={true}
                 scalesPageToFit={true}
             />
         </View>
    

    运行后发现并不如意,在界面显示的二维码周围会有一个边框,很不美观,这个方法pass!

    方法二
        <View style={styles.imageView}>
            <WebView
                 style={{
                     height: 150,
                     width: 150,
                     alignItems: 'center',
                 }}
                 source={{url:网页中的图片地址}}
                 javaScriptEnabled={true}
                 domStorageEnabled={true}
                 scalesPageToFit={true}
             />
         </View>
    

    这个方法显示倒是可以,但网页地址是不断变化的,那图片的地址也在不断变化,可以预料到肯定有bug存在,这种方式貌似不太合适!

    方法三
    <View style={styles.imageView}>
            <WebView
                 style={{
                     height: 150,
                     width: 150,
                     alignItems: 'center',
                     paddingRight:10
                 }}
                 source={{url: this.state.url}}
                 javaScriptEnabled={true}
                 domStorageEnabled={true}
                 scalesPageToFit={false}
                 injectedJavaScript="var img = document.getElementsByTagName('img')[0];
                 img.style.cssText = 'width: 130px; height:130px;'"
             />
         </View>
    

    这种方式完美显示,injectedJavaScript属性就是设置在网页加载之前注入的一段JS代码。我们可以通过injectedJavaScript,在网页加载之前改变网页的css样式,这样就完美解决网页显示大小不合适,不居中的问题了~
    上张效果图:

    sybil052-144201@2x.png

    相关文章

      网友评论

        本文标题:react-native webView加载网页问题

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