美文网首页
iOS12 Error Domain=NSPOSIXErrorD

iOS12 Error Domain=NSPOSIXErrorD

作者: zmfflying | 来源:发表于2021-03-01 18:52 被阅读0次

    这个错误在我使用 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)")
        }
    }
    

    相关文章

      网友评论

          本文标题:iOS12 Error Domain=NSPOSIXErrorD

          本文链接:https://www.haomeiwen.com/subject/onnafltx.html