Migrating from UIWebView to WKWebView

in my app I’m migrating from UIWebView to WKWebView , how can I rewrite these function for WKWebView?

    func webViewDidStartLoad(webView: UIWebView){}
    func webViewDidFinishLoad(webView: UIWebView){}

and

  • How to check if WkWebView finish loading in Objective-C?
  • UIDocumentPickerViewController dismisses parent view controller
  • Why WKWebView doesn't display videos? - Swift 3
  • Including WebKit framework for iOS8 fails validation
  • WKWebView open links from certain domain in safari
  • WKWebView fails to load images and CSS using loadHTMLString(_, baseURL:)
  •     func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
            print("webview asking for permission to start loading")
            if navigationType == .LinkActivated && !(request.URL?.absoluteString.hasPrefix("http://www.myWebSite.com/exemlpe"))!{
                UIApplication.sharedApplication().openURL(request.URL!)
                print(request.URL?.absoluteString)
                return false
            }
            print(request.URL?.absoluteString)
            lastUrl = (request.URL?.absoluteString)!
    
            return true
        }
    
    
        func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
            print("webview did fail load with error: \(error)")
            let testHTML = NSBundle.mainBundle().pathForResource("back-error-bottom", ofType: "jpg")
            let baseUrl = NSURL(fileURLWithPath: testHTML!)
    
            let htmlString:String! = "myErrorinHTML"
            self.webView.loadHTMLString(htmlString, baseURL: baseUrl)
        }
    

    Solutions Collect From Internet About “Migrating from UIWebView to WKWebView”

    UIWebView => WKWebView Equivalent

    didFailLoadWithError => didFailNavigation
    webViewDidFinishLoad => didFinishNavigation
    webViewDidStartLoad => didStartProvisionalNavigation
    shouldStartLoadWithRequest => decidePolicyForNavigationAction
    

    About shouldStartLoadWithRequest you can write:

    func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: ((WKNavigationActionPolicy) -> Void)) {
        print("webView:\(webView) decidePolicyForNavigationAction:\(navigationAction) decisionHandler:\(decisionHandler)")
    
        switch navigationAction.navigationType {
            case .LinkActivated:
            if navigationAction.targetFrame == nil {
                self.webView?.loadRequest(navigationAction.request)
            }
            if let url = navigationAction.request.URL where !url.absoluteString.hasPrefix("http://www.myWebSite.com/example") {
                UIApplication.sharedApplication().openURL(url)
                print(url.absoluteString)
                decisionHandler(.Cancel)
            return
            }
            default:
                break
        }
    
        if let url = navigationAction.request.URL {
            print(url.absoluteString)
        }
        decisionHandler(.Allow)
    }
    

    And for the didFailLoadWithError:

    func webView(webView: WKWebView, didFailNavigation navigation: WKNavigation, withError error: NSError) {
        print("webView:\(webView) didFailNavigation:\(navigation) withError:\(error)")
        let testHTML = NSBundle.mainBundle().pathForResource("back-error-bottom", ofType: "jpg")
        let baseUrl = NSURL(fileURLWithPath: testHTML!)
    
        let htmlString:String! = "myErrorinHTML"
        self.webView.loadHTMLString(htmlString, baseURL: baseUrl)
    }