我正在使用WKWebView开发Web应用程序。 我现在面临的问题如下:
我正在使用webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
确定用户是否正在尝试访问.pdf,.mov,.docx或.pages等附件,并使用decisionHandler
允许或取消导航
但是,当我尝试通过
访问navigationResponse
的{{1}}属性时
response
对于某些文件类型(如.docx,.pages和.rtf)的可选检查失败。对于.mov这样的其他类型,everthing可以按预期工作。
检查if let response = navigationResponse.response as? HTTPURLResponse
对诸如.rtf之类文件的关键导航,我发现以下内容:
navigationResponse.response.url
到目前为止,我发现该url方案属于Apple的Quicklook框架,该框架用于向用户显示WKWebView中的某些文件内容。但是,该方案仅在内部使用,不应在其中使用。
对x-apple-ql-id://BB110CD9-7330-4A39-82E4-6E550E9AC4EB/x-apple-ql-magic/ein%20text.rtf
的可选检查并将其强制转换为navigationResponse.response
后失败,我尝试取消导航调用HTTPURLResponse
。结果是我的Web视图显示空白页面,并且没有调用WKWebView decisionHandler(.cancel)
didFinish`方法。
如果我尝试通过s error functions, nor the
webView.load(someRequest)
以webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error)
又称为error
被调用。 “框架加载中断”。
我不知道是什么导致WKWebView出现这种奇怪的行为。
操作系统为iOS 11.4。
有人知道是什么原因吗?有人可以暗示进一步调查的地方吗?
非常感谢您。
答案 0 :(得分:0)
由于WKWebView中的QuickLook功能,我不确定这是否是默认行为,或者是错误。
我已经实现了一种解决方法,可以使用navigationAction.request.URL
(可以通过以下方法提取)来下载文件:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;