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



我正在使用WKWebView开发一个Web应用程序。 我现在面临的问题如下:

我正在使用webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)来确定用户是否尝试访问.pdf、.mov、.docx或 .pages 等附件,并使用decisionHandler允许或取消导航。

但是,当我尝试通过以下方式访问navigationResponseresponse属性时

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 thedidFinish' 方法。

如果我尝试在发生这种情况后通过webView.load(someRequest)安排任何请求

webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error)

被召唤errorError Domain=WebKitErrorDomain Code=102又名。"帧加载中断"。

我不知道是什么原因导致WKWebView表现出这种奇怪的行为。

操作系统是iOS 11.4。

有没有人知道可能是什么原因,或者有人能够给出进一步调查的提示?

谢谢。

我在iOS
  1. 12.0上也遇到了同样的问题,而在iOS 13上工作正常。
  2. 我不确定这是由于WKWebView中的快速查看功能而导致的默认行为还是错误。

  3. 我已经实现了一种解决方法来使用navigationAction.request.URL(可以在下面的方法中提取(来下载文件:

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

相关内容

  • 没有找到相关文章

最新更新