Как предотвратить перенаправление при использовании react-native-webview на Android

Я хочу предотвратить перенаправление на новую страницу в react-native-webview. Вместо перенаправления я хочу открыть новый модальный веб-просмотр и открыть там URL-адрес.

Возможно ли это сделать?

В IOS использование stopLoading работает нормально, но не работает на Android,

onNavigationStateChanged(navState) {
    if(navState.canGoBack)
    {
        this._webView.stopLoading();

        if(navState.url.indexOf('newWebViewPage') !== -1)
        {
            this.props.navigation.navigate('WebViewModal',{
                'url':navState.url,
                'title':navState.url
            })

            return false;
        }
        else
        {
            return true;
        }
    }
}

render() {
    let headers = {
        'Authorization':'Basic ' + btoa(NetworkUtils.USERNAME + ":" + NetworkUtils.PASSWORD),
        'Content-Type':'multipart/form-data',
    }

    return (
        <WebView
            source={{ uri: this.props.url, headers:headers }}
            bounces={false}
            javaScriptEnabled={true}
            onMessage={this.onMessage.bind(this)}
            injectedJavaScript={injectedJavascript}
            ref={(webView) => { this._webView = webView; }}
            style={[styles.webview,this.props.style]}
            startInLoadingState={false}
            useWebKit={true}
            onNavigationStateChange={this.onNavigationStateChanged.bind(this)}
            onLoadEnd={this.props.onLoadEnd?this.props.onLoadEnd:()=>{}}
            mixedContentMode={'compatibility'}
        />
    );
}

Пожалуйста помоги!!


person newbeeep    schedule 23.09.2019    source источник


Ответы (1)


я использую реагирующую навигацию. Таким образом я делаю:

navigationRedirect = navState => {
    const { dispatch } = this.props.navigation
    const url = navState.url

      if(url.includes('www.unotv.com')){

         if(navState.canGoBack && navState.loading){

            this.webview.goBack()

             return dispatch(StackActions.push({
                 routeName: 'VisorWebView',
                 params: { url },
                 actions: [this.trackingForAnalytics(url)] //This function not affect the navigation
            }))

         }

     }else{
           this.webview.stopLoading()
           this.webview.goBack()
           Linking.openURL(url)
    }

}

  <WebView
     ref={ref => this.webview = ref }
     source={{ uri: this.state.baseURI }}
     originWhitelist={["https"]}
     userAgent="Mozilla/5.0 (Linux; Android 4.4.4; One Build/KTU84L.H4) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/28.0.0.20.16;]"
                decelerationRate='normal'
                allowsInlineMediaPlayback={true}                    
                mediaPlaybackRequiresUserAction={false}
                sharedCookiesEnabled={true}
                mixedContentMode='always'
                startInLoadingState={true}
                containerStyle={{ marginTop: isTablet ? -60 : -50 }}
                renderLoading={() => (
                    <ActivityIndicator
                        color='#29aae1'
                        size='large'
                        style={{ flex: 1, backgroundColor: '#fff', alignItems: 'center', justifyContent: 'flex-start' }}
                    />
                )}
                onNavigationStateChange={this.redirect}
            />

При касании ссылки из моего домена открывается браузер (Safari). Если ссылка находится на моем домене, откройте другой экран с другим веб-просмотром :)

person Dave Islas    schedule 18.06.2020