我正在使用WKWebView开发一个Web应用程序,我现在面临的问题如下。
我正在使用 webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
以确定用户是否试图访问一个附件文件,如.pdf、.mov、.docx或.pages,并允许或取消导航。decisionHandler
.
然而,当我试图访问 navigationResponse
's 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
到目前为止,我发现这个url方案属于Apple的Quicklook框架,它用于在WKWebView中向用户显示某些文件内容。但是这个方案只在内部使用,不应该出现在那里。
在选择检查了 navigationResponse.response
并将其投向 HTTPURLResponse
失败,我尝试取消导航调用 decisionHandler(.cancel)
. 结果是我的webview显示的是一个白色的页面,而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。
有谁知道可能是什么原因,或者有谁能给个提示,让我进一步调查?
非常感谢您。
我不知道这是WKWebView中的QuickLook功能的默认行为还是一个错误。
我已经实现了一个变通方法,使用 navigationAction.request.URL
(可通过以下方法提取)下载文件。
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;