这个错误在我使用 WKWebView 进行重定向的时候出现,当时在项目中有一个需求是这样的:先访问一个线上的链接,然后当访问某个链接的时候,转为访问本地的链接。
我开发完成后,发现在 iOS13 及以上正常运行,但是在 iOS12 上报这个错:
Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={_WKRecoveryAttempterErrorKey=<WKReloadFrameErrorRecoveryAttempter: 0x280c91ba0>, _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <721C0E5C-E0C3-49FF-B7D7-A5D82451E09D>.<9>, _kCFStreamErrorDomainKey=1, _kCFStreamErrorCodeKey=1}
最后经过测试发现,是在 iOS12 上的 WKWebView 的问题,目前没有发现直接的解决办法,想到的一个方案是:在 iOS12 的时候,一个 webview 访问线上链接,一个 webview 访问本地链接。哪位大佬有解决办法还望告知,感激不尽。
测试代码如下:
import UIKit
import WebKit
import ZipArchive
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
//创建 webview
let webConfiguration = WKWebViewConfiguration();
let jsStr = "var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width,initial-scale=1.0,maximum-scale=1.0, minimum-scale=1.0, user-scalable=no'); document.getElementsByTagName('head')[0].appendChild(meta);"
let wkUScript = WKUserScript.init(source: jsStr, injectionTime: WKUserScriptInjectionTime.atDocumentEnd, forMainFrameOnly: true)
let wkuContentController = WKUserContentController.init()
wkuContentController.addUserScript(wkUScript)
webConfiguration.userContentController = wkuContentController
let webView = WKWebView(frame: self.view.bounds, configuration: webConfiguration);
webView.navigationDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false;
self.view.addSubview(webView)
//先打开线上的链接
webView.load(URLRequest.init(url: URL.init(string: "https://www.baidu.com")!))
//5s后开始打开本地链接
//这里我本地链接用的是 一个zip解压到本地沙盒的方式
DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
//解压
let filePath = "\(NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!)/localHtml"
if !FileManager.default.fileExists(atPath: filePath) {
let localPath = Bundle.main.path(forResource: "gui_dist.zip", ofType: nil)
let zip = ZipArchive.init()
zip.unzipOpenFile(localPath)
zip.unzipFile(to: filePath, overWrite: true)
let success = zip.unzipCloseFile()
print("unzipCloseFile ---- \(success)")
}
//打开本地链接
let htmlUrl = URL.init(string: "file://\(filePath)/index.html")
let fileUrl = URL.init(fileURLWithPath: filePath)
webView.loadFileURL(htmlUrl!, allowingReadAccessTo:fileUrl)
}
}
}
extension ViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print("didFailProvisionalNavigation --- \(error)")
}
}
网友评论