尝试使用 wkwebview 下载文件时出现didFailProvisionalLoadForFrame

问题描述 投票:0回答:2

我有一个 WKWebView,在我的页面上有一个按钮,它会生成一个 pdf 文件供下载。因此,当我在任何浏览器中单击它时,它会立即开始下载。我也想要 wkwebview 。我做了一些研究并实施了以下内容:

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
    if !navigationResponse.canShowMIMEType {
        decisionHandler(.download)
    } else {
        decisionHandler(.allow)
    }
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) {
    if navigationAction.shouldPerformDownload {
        decisionHandler(.download, preferences)
    } else {
        decisionHandler(.allow, preferences)
    }
}

func webView(_ webView: WKWebView, navigationAction: WKNavigationAction, didBecome download: WKDownload) {
    download.delegate = self
}

func webView(_ webView: WKWebView, navigationResponse: WKNavigationResponse, didBecome download: WKDownload) {
    download.delegate = self
}

func download(_ download: WKDownload, decideDestinationUsing response: URLResponse, suggestedFilename: String, completionHandler: @escaping (URL?) -> Void) {
    if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        let url = dir.appendingPathComponent(suggestedFilename)
        completionHandler(url)
    }
    
}

但是当我单击它时,没有任何反应,控制台显示以下错误:

WebPageProxy::didFailProvisionalLoadForFrame: frameID=3, domain=WebKitErrorDomain, code=102, isMainFrame=1
swift download wkwebview
2个回答
0
投票

尝试添加以下委托函数:

func download(_ download: WKDownload, didFailWithError error: Error, resumeData: Data?) {
    print("webkit download fail: \(error.localizedDescription)")
}

如果您收到消息“操作无法完成。(NSURLErrorDomain 错误 -3000。)”,则问题很可能是您的下载目标目录中存在同名文件。更多信息可以在这里找到。

您可能还想添加以下委托函数来确认您的文件是否已实际下载:

func downloadDidFinish(_ download: WKDownload) {
    print("webkit download finished!")
}

0
投票

我也遇到同样的错误

WebPageProxy::didFailProvisionalLoadForFrame: frameID=3, domain=WebKitErrorDomain, code=102, isMainFrame=1

事实证明,我在 WKURLSchemeHandler 类中遇到了错误,该类在响应上设置了错误的矿类型

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