Я использую собственный веб-вид реагирования для отображения веб-сайта в приложении. Я хотел бы запретить пользователю переходить на другой хост. Для этого я использую обходной путь state :
state = {
key: 1,
isWebViewUrlChanged: false,
url: 'https://google.com'
};
и изменить состояние в веб-представлении
<WebView
key={this.state.key}
url={this.state.url }
onNavigationStateChange={this.setWebViewUrlChanged}
/>
используя эту функцию
setWebViewUrlChanged = (webviewState) => {
if (webviewState.url.toString().indexOf('google.com') < 0) {
this.setState({ url: 'https://google.com' });
this.setState({ isWebViewUrlChanged: true });
};
Идея состоит в том, что всякий раз, когда пользователь переходит на страницу, которая не содержит google.com, URL-адрес снова изменяется на google.com, что вынуждает компонент повторно отображаться из-за изменения состояния. Однако это, похоже, не работает. Изменение состояния срабатывает правильно, но веб-просмотр по-прежнему загружает любой URL-адрес, на который переходит пользователь, и я не могу запустить веб-просмотр для загрузки URL-адреса, который я предоставляю.
Что нужно сделать: снова загрузить google.com, если пользователь переходит на другой сервер (например, github.com). Я попробовал ответное-нативное-блокируемое веб-представление (https://www.npmjs.com/package/react-native-blockable-webview), которое, кажется, делает то, что мне нужно, но уже устарело и больше не совместимо, но концепция политики именно то, что нужно искать.
Примечание: я использую это только на Android. Я хорошо знаю, что на NavigationStateChange не работает на iOS.