美文网首页
关于react-native 监听webview页面返回事件的问

关于react-native 监听webview页面返回事件的问

作者: 飞翔的灰灰 | 来源:发表于2019-12-03 19:52 被阅读0次

最近写了个新rn项目,项目要求是rn内嵌一个webview网页实现全部业务需求~~鉴于网页页面数量较多,这就涉及到页面的跳转、返回上页以及退出APP的问题,由于不做处理的话点击手机的返回按钮会直接退出APP,故在网上搜索了相应的解决方案,为防止误导大家,就不贴图了,总之,无非都是抄来抄去还是错的,按照其写法,多近几个页面,返回到网页首页以后就得多点n次才能退出APP,差评,经过一番操作调试,贴上本人代码

export default class App extends Component<Props> {

  constructor(props){

    super(props);

    this.state = {

      backButtonEnabled:false,

      clicked:false,

    };

}

  onNavigationStateChange = navState => {

    this.state.backButtonEnabled= navState.canGoBack

  };

  render() {

    return (

      <>

      <StatusBar backgroundColor="#EB0000" barStyle="light-content" translucent={true} />

      <WebView

        source={{ uri: ********' }}

        style={styles.container}

        ref="webView"

        onNavigationStateChange={this.onNavigationStateChange}

        />

      </>

    );

  }

  // 监听原生返回键事件

  componentDidMount() {

    setTimeout(()=>{

      SplashScreen.hide()

    } ,2000);

 this.setState({

  clicked:false

 })

    if (Platform.OS === 'android') {

      BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);

    }

  }

  onBackAndroid = () => {

    console.log(this.state.backButtonEnabled)

    if (this.state.backButtonEnabled) {

      this.refs['webView'].goBack();

      return true;

    } else {

      if (this.state.clicked) {

        //点过一次了。

        console.log('back')

        return false;

      }

      this.state.clicked=true

      ToastAndroid.show('再按一次退出应用', ToastAndroid.SHORT);

      return true;

    }

  };

}

亲测可用

相关文章

网友评论

      本文标题:关于react-native 监听webview页面返回事件的问

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