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

问题描述 投票:1回答:1

我正在使用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 thedidFinish`方法被调用。

如果我尝试在这之后通过 webView.load(someRequest)

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

被称为 errorError Domain=WebKitErrorDomain Code=102 又名:"框架负荷中断"。"帧加载中断"。

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

操作系统是iOS 11.4。

有谁知道可能是什么原因,或者有谁能给个提示,让我进一步调查?

非常感谢您。

swift ios11 wkwebview quicklook
1个回答
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;

© www.soinside.com 2019 - 2024. All rights reserved.