我正在我的应用程序中使用React Native WebViw。我想禁用文件下载。通常只是文件。我无法禁用存储权限,因为应用程序中的某些功能需要此功能。
不幸的是,没有简单的设置。但是至少有一种解决方法非常简单。
实现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;
}
对于更复杂的实现选项,可以使用正则表达式来检测要阻止的更多文件扩展名模式。
请注意,此处理程序不能是异步的,并且不能跨平台正常工作。如果您想做一些更复杂的事情(例如,在后台隐式地向该URL发出HEAD请求,以查看其将要发回的内容),则可以阻止/拒绝所有请求,进行处理,然后以编程的方式告诉如果可以,请使用webview导航到该URL。在大多数情况下,它将使导航非常缓慢,但非常准确。