我正在使用WKWebView开发一个Web应用程序。 我现在面临的问题如下:
我正在使用webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
来确定用户是否尝试访问.pdf、.mov、.docx或 .pages 等附件,并使用decisionHandler
允许或取消导航。
但是,当我尝试通过以下方式访问navigationResponse
的response
属性时
if let response = navigationResponse.response as? HTTPURLResponse
对于某些文件类型(如 .docx、.pages .rtf(,可选检查失败。对于像.mov这样的其他类型,一切都按预期工作。
检查navigationResponse.response.url
对文件的关键导航,例如.rtf我发现以下内容:
x-apple-ql-id://BB110CD9-7330-4A39-82E4-6E550E9AC4EB/x-apple-ql-magic/ein%20text.rtf
到目前为止,我发现这个网址方案属于苹果的快速查看框架,用于向用户显示WKWebView中的某些文件内容。但是,此方案仅在内部使用,不应出现在那里。
在可选检查navigationResponse.response
并将其转换为HTTPURLResponse
失败后,我尝试取消导航调用decisionHandler(.cancel)
。结果是我的 Web 视图显示了一个 blanc 页面,并且没有调用任何 WKWebViews error functions, nor the
didFinish' 方法。
如果我尝试在发生这种情况后通过webView.load(someRequest)
安排任何请求
webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error)
被召唤error
被Error Domain=WebKitErrorDomain Code=102
又名。"帧加载中断"。
我不知道是什么原因导致WKWebView表现出这种奇怪的行为。
操作系统是iOS 11.4。
有没有人知道可能是什么原因,或者有人能够给出进一步调查的提示?
谢谢。
- 12.0上也遇到了同样的问题,而在iOS 13上工作正常。
我不确定这是由于WKWebView中的快速查看功能而导致的默认行为还是错误。
我已经实现了一种解决方法来使用
navigationAction.request.URL
(可以在下面的方法中提取(来下载文件:
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;