#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.