【问题标题】:How do I customize website CSS in a react native webview?如何在反应原生 webview 中自定义网站 CSS?
【发布时间】:2019-05-30 19:41:25
【问题描述】:

我一直在使用 react native 上的 webviews,但我想更改网站的 css 以自定义样式。有办法吗?

使用 react native cli & android studio

import React from 'react';
import { StyleSheet, Text, View, Image, StatusBar, ScrollView, TouchableOpacity, WebView, ActivityIndicator } from 'react-native';

class king_of_prussia extends React.Component {

  static navigationOptions = {
       title: 'King Of Prussia',
       headerTitleStyle :{textAlign: 'center', alignSelf:'center', fontSize: 18, fontWeight: 'normal', color: '#3E3E40' },
       headerStyle:{
           backgroundColor:'white',
       },
   };

  ActivityIndicatorLoadingView() {
    return (
      <ActivityIndicator
        color='black'
        size='large'
        style={styles.ActivityIndicatorStyle}
      />
    );
  }

  render() {
    return (
        <View style={styles.container}>
        <StatusBar
            backgroundColor='#F1F1F1'
            barStyle='dark-content'/>
            <WebView
                source={{uri: 'https://www.simon.com/mall/king-of-prussia/map#/'}}
                scalesPageToFit = {false}
                javaScriptEnabled={true}
                domStorageEnabled={true}
                renderLoading={this.ActivityIndicatorLoadingView}
                startInLoadingState={true}
            />
        </View>
    );
  }
}

export default king_of_prussia;

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#EFF2F5',
  },
  footer: {
    flexDirection: 'column',
    alignItems: 'center',
    marginBottom: 25,
  },
  shareText:{
    color:'#95989A',
    fontSize: 12
  },
  ActivityIndicatorStyle:{
    position: 'absolute',
    left: 0,
    right: 0,
    top: 0,
    bottom: 0,
    alignItems: 'center',
    justifyContent: 'center'
  }
});

我想从网站上删除标题以及修改其他样式。

【问题讨论】:

    标签: node.js reactjs react-native webview


    【解决方案1】:

    WebView 有一个可用的“injectedJavaScript”道具,它允许您向它提供一段 javascript,您可以使用它来操作页面上的任何 CSS/HTML。

    这有点 hacky,但我并没有真正看到替代方案,因为您在使用 webview 时实际上是在使用 iframe。

    我正在使用它来隐藏我在应用程序的 web 视图中引用的网站导航栏中的汉堡栏:

    <WebView
      source={{uri: this.state.magicUrl}}
      style={{ flex: 1 }}
      injectedJavaScript={'function hideHeaderToggle() {var headerToggle = document.getElementsByClassName("navbar-toggle"), i;for (i = 0; i < headerToggle.length; i += 1) {headerToggle[i].style.display = "none";};}; hideHeaderToggle();'}
    />
    

    完全有可能有更好的选择,但这肯定是一种选择。

    【讨论】:

    • 德文加德纳非常感谢!你知道我怎样才能给地图 100% 的高度吗?
    • 函数 fullMap() { var topNav = document.getElementsByClassName('navbar'); var mapWrap = document.getElementsByClassName('map-wrapper'); for(var i = 0; i
    • 对不起格式,评论格式很烂。将整个内容作为字符串传递给注入的JavaScript,它应该是金色的。
    • 最后一件事,top = "0" 有效,但是高度保持不变,知道吗?
    • 很难说,在处理可能在站点端运行的所有 css 和 js 时,有很多潜在的故障点。也就是说,您应该能够使用第二个 for 循环中的属性来根据需要操作 map-wrapper 元素。可能想尝试使用一些附加属性,例如位置或其他传递高度的方法。也许将 !important 添加到高度值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    相关资源
    最近更新 更多