WKWebView:尝试打开.docx,.pages等时的奇怪行为

时间:2018-09-03 11:42:53

标签: swift ios11 wkwebview quicklook

我正在使用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。

有人知道是什么原因吗?有人可以暗示进一步调查的地方吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

  1. 我在iOS 12.0上也遇到了同样的问题,而在iOS 13上却运行良好。
  2. 由于WKWebView中的QuickLook功能,我不确定这是否是默认行为,或者是错误。

  3. 我已经实现了一种解决方法,可以使用navigationAction.request.URL(可以通过以下方法提取)来下载文件:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;