Ios WKWebView检查web view是否支持加载文件

Ios WKWebView检查web view是否支持加载文件,ios,iphone,swift4,wkwebview,swift5,Ios,Iphone,Swift4,Wkwebview,Swift5,我正在创建一个iOS应用程序。我在某些阶段使用WKWebView来显示任何扩展类型的文件。对于音频、视频、html、文本、pdf、文档文件,其工作良好。但是像.zip、.csv和许多其他文件,它没有显示正确的数据或显示空白屏幕,没有任何错误,我在它的导航方法中得到了 我的问题是如何检查我的WKWebView是否能够加载/支持该文件?因此,如果无法加载或支持该文件,我可以显示另一个视图,直接将该文件下载到文件管理器,并为用户提供保存或共享该文件的选项。 就像在Safari浏览器中,当我尝试加载zi

我正在创建一个iOS应用程序。我在某些阶段使用WKWebView来显示任何扩展类型的文件。对于音频、视频、html、文本、pdf、文档文件,其工作良好。但是像.zip、.csv和许多其他文件,它没有显示正确的数据或显示空白屏幕,没有任何错误,我在它的导航方法中得到了

我的问题是如何检查我的WKWebView是否能够加载/支持该文件?因此,如果无法加载或支持该文件,我可以显示另一个视图,直接将该文件下载到文件管理器,并为用户提供保存或共享该文件的选项。

就像在Safari浏览器中,当我尝试加载zip文件时,它不会显示任何预览,它会显示要下载的警报(在iOS 13中)或显示保存和共享文件操作(在iOS 13中)。Safari如何检测到它是否支持该文件

请不要建议对mime类型或扩展名使用直接字符串匹配,因为世界上可能有1000多个文件扩展名


您需要将控制器设置为
webView.navigationDelegate
,并定义导航响应委托回调,如下所示:

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, 
    decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {

    if navigationResponse.canShowMIMEType {
        decisionHandler(.allow)
    } else {
        decisionHandler(.cancel)
        // do something else with `navigationResponse.response`
    }
}