Веб-просмотр нажмите : URL-адрес не обнаружен в android , iOS работает : react native

#android #ios #react-native #url #webview

Вопрос:

У меня есть собственное приложение react, которое загружается по URL-адресу в веб-режиме после входа в систему. Пользователь перемещается в веб-режиме, щелкая по ссылкам, как это поддерживается. Теперь я хочу открыть параметры общего доступа внутри веб-представления, нажав на кнопку в веб-представлении. Когда мы нажимаем на кнопку, у нас есть URL-адрес, но я не могу определить этот URL с помощью «onNavigationStateChange». Итак, как мы можем справиться с этим без URL-адреса? Я перепробовал много ссылок, но ни одна не принесла мне результата. «ОТКРЫТЬ КОНТРОЛЛЕР ОБЩЕГО ДОСТУПА» никогда не достигается, как и «щелчок по типу навигации». Вот мой пример кода:

  <WebView scalesPageToFit
    style={{ flex: 1 }} source={{ uri: url  }} onLoadStart={() => (setLoading(true))} onLoadEnd={() => (setLoading(false))}
    javaScriptEnabled={true}
    domStorageEnabled={true}
    onNavigationStateChange = {handleNavigationStateChange}
    
    onLoadProgress = {({ nativeEvent }) => {
     
      console.log(nativeEvent.url)     
  }}
    />

const handleNavigationStateChange = navState => {
console.log(navState.url);
console.log(navState.navigationType)
const { url } = navState.url;
if (!url) return;

if (url.includes('Logout')) {
  Alert.alert(
    "Logout",
    "Are you sure you want to logout?",
    [
      {
        text: "No",
        onPress: () => console.log("Cancel Pressed"),
        style: "cancel"
      },
      { text: "Yes", onPress: () => navigation.pop(1) }
    ]
  );
}
if (url.includes('Register')) {
  console.log('OPEN SHARE CONTROLLER')
}
if (navState.navigationType === 'click') {
  // User clicked something
  console.log('User clicked something')
 

}
};

Комментарии:

1. onNavigationStateChange вызывается при изменении URL веб-представления, каково действие вашей кнопки?

2. URL — адрес изменяется, но не обнаруживается здесь, как когда я делаю то же самое с родной iOS-используя Xcode, я получаю URL-адрес и открываю контроллер активности общего доступа.

3. не могли бы вы поделиться более подробным кодом своей веб-страницы? вы можете скрыть конфиденциальные данные.

Ответ №1:

Решается с помощью setSupportMultipleWindows={false} и с помощью onShouldStartLoadWithRequest.