在React native WebView中禁用下载

问题描述 投票:0回答:1

我正在我的应用程序中使用React Native WebViw。我想禁用文件下载。通常只是文件。我无法禁用存储权限,因为应用程序中的某些功能需要此功能。

android react-native webview hybrid-mobile-app
1个回答
1
投票

不幸的是,没有简单的设置。但是至少有一种解决方法非常简单。

实现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。在大多数情况下,它将使导航非常缓慢,但非常准确。

© www.soinside.com 2019 - 2024. All rights reserved.