К сожалению, для этого нет простых настроек. Но по крайней мере один обходной путь довольно прост.
Реализация обработчика onShouldStartLoadWithRequest
. Если вы вернете false
из этого обработчика, WebView не будет загружать URL. Затем вы можете решить, хотите ли вы простую реализацию, которая просто ищет «файловые URL» или делает что-то более умное. Очень наивная реализация:
<WebView
ref={r => this._webView = r}
source={{ uri }}
onShouldStartLoadWithRequest={this.checkLoadRequest}
onNavigationStateChange={this.checkLoadRequest}
/>
...
checkLoadRequest(navigator) {
const url = navigator.url.toLowerCase();
// VERY naive implementation but might be all you wanted
if (url.indexOf('.pdf') > -1 || url.indexOf('.doc') > -1) {
// On iOS we just return false.
// Android requires us to call stopLoading().
this._webView.stopLoading();
return false;
}
return true;
}
Для более сложного варианта реализации вы можете использовать регулярное выражение, чтобы обнаружить больше шаблонов расширений файлов, которые вы хотите заблокировать.
Обратите внимание, что этот обработчик не может быть асинхронным c и работать должным образом кроссплатформенно. Хак, если вы хотите сделать что-то более изощренное (например, сделать HEAD-запрос к URL-адресу незаметно за кулисами, чтобы увидеть, что он собирается отправить обратно), вы можете просто заблокировать / отклонить все запросы, сделайте свои волхвы c, затем программно скажите веб-просмотру, чтобы перейти к URL, если он в порядке. В большинстве случаев навигация будет очень медленной, но очень точной.