• RN 实现简易浏览器


    import React, { Component } from 'react';
    import {
      AppRegistry,
      StyleSheet,
      Text,
      View,
      Dimensions,
      StatusBar,
      TouchableOpacity,
      TextInput,
      WebView
    } from 'react-native';
    var {width,height} =Dimensions.get('window')
    export default class demo extends Component {
      constructor(props){
        super(props);
        this.state={
          source:{
            uri:"https://www.baidu.com"
          },
          status:"NO page Loaded",
          backBuutonEnabled:false,
          forwardButtonEnabled:false,
        }
        this.inputURL="";
        this.goBack=this.goBack.bind(this);
        this.goForward=this.goForward.bind(this);
        this.goButton=this.goButton.bind(this);
        this.stateChange=this.stateChange.bind(this);
        this.onMessage=this.onMessage.bind(this)
      }
      onMessage(data){
        console.log("网页的数据");
      }
      stateChange(navState){
        console.log("网页路由数据");
        console.log(navState);
        this.setState({
          backBuutonEnabled:navState.canGoBack,
          forwardButtonEnabled:navState.canGoForward,
          status:navState.title,
        })
      }
      goBack(){
        //让webView组件退回
        this.refs.webViewRef.goBack();
      }
      //网页前进
      goForward(){
        this.refs.webViewRef.goForward();
      }
      //searh
      goButton(){
        console.log(this.inputURL.toLowerCase());
        //在input和Go都调用这个方法
        let uri=this.inputURL.toLowerCase();
        if(uri==this.state.source.uri){
          //当网页和当前的网址相同时候 重载网址
          this.refs.webViewRef.reload();
          console.log("zhogzao");
        }else{
          console.log("加载新网页");
          let source={};
          source.uri=uri;
          this.setState({
            source
          })
        }
    
      }
      render() {
        return (
          <View style={styles.container}>
            <StatusBar hidden={true}/>
            <View style={styles.addressBarRow}>
              <TouchableOpacity
                onPress={this.goBack}
                style={this.state.backBuutonEnabled?styles.navButton:styles.disableButton}>
                <Text>{'<'}</Text>
              </TouchableOpacity>
              <TouchableOpacity
                  onPress={this.goForward}
                style={this.state.forwardButtonEnabled?styles.navButton:styles.disableButton}>
                <Text>{'>'}</Text>
              </TouchableOpacity>
              <TextInput ref="urlInputRef"
              autoCapitalize="none"
              style={styles.addressInput}
              defaultValue={this.state.url}
              onSubmitEditing={this.goButton}
              onChangeText={(newText)=>this.inputURL=newText}
              clearButtonMode='while-editing'
              />
              <TouchableOpacity
                onPress={this.goButton}
                style={styles.goButton}>
                <Text>Go!</Text>
              </TouchableOpacity>
            </View>
            <WebView
              ref="webViewRef"
              style={styles.webView}
              source={this.state.source}
              javaScriptEnabled={true}
              // 仅限Android平台。指定是否开启DOM本地存储
              domStorageEnabled={true}
              //网页导航 返回的是一些参数对象
              onNavigationStateChange={this.stateChange}
              // 强制WebView在第一次加载时先显示loading视图。默认为true
              startInLoadingState={true}
              //在网页端注入函数 这里得到返回的数据 从而达到RN和网页端的数据的交换
              // onMessage={this.onMessage}
            />
            <View style={styles.statusBar}>
              <Text style={styles.statusBarText}>{this.state.status}</Text>
            </View>
          </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: 'blue',
      },
      addressBarRow:{
        flexDirection:'row',
        padding:8,
      },
      navButton:{
        20,
        padding:3,
        marginRight:20,
        alignItems:'center',
        justifyContent:'center',
        backgroundColor:'#fff',
        borderColor:'transparent',
        borderRadius:3
      },
      disableButton:{
        20,
        padding:3,
        marginRight:20,
        alignItems:'center',
        justifyContent:'center',
        backgroundColor:'grey',
        borderColor:'transparent',
        borderRadius:3
      },
      addressInput:{
        backgroundColor:'#fff',
        borderColor:'transparent',
        borderRadius:3,
        height:24,
        paddingLeft:10,
        paddingTop:3,paddingBottom:3,
        flex:1,
        fontSize:14,
      },
      goButton:{
        height:24,
        padding:3,
        marginLeft:8,
        alignItems:'center',
        justifyContent:'center',
        borderColor:'transparent',
        borderRadius:3,
        alignSelf:'stretch'
      },
      webView:{
        backgroundColor:'#fff',
        height:350
      },
      statusBar:{
        flexDirection:'row',
        alignItems:'center',
        paddingLeft:5,
        height:22
      },
      statusBarText:{
        color:'#fff',
        fontSize:13
      }
    });
    
    AppRegistry.registerComponent('demo', () => demo);
    
  • 相关阅读:
    HDFS文件系统
    使用cmake安装单实例mysql
    python读取数据库表数据并写入excel
    linux文件行数统计
    ORACLE清空回收站操作
    Oracle 11g静默安装
    图解Java设计模式之职责链模式
    图解Java设计模式之策略模式
    图解Java设计模式之状态模式
    图解Java设计模式之解释器模式
  • 原文地址:https://www.cnblogs.com/allenxieyusheng/p/7503667.html
Copyright © 2020-2023  润新知