Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WKWebView Content loaded function never get called

i try to get a function called after my Content inside WKWebView is fully loaded. I found the "didFinishNavigation" function at the Apple Swift WKNavigation Documentation.

func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {
    println("WebView content loaded.")
}

But the function never get called.

import UIKit
import WebKit

class ViewController: UIViewController WKNavigationDelegate {

   override func loadView() {
       super.loadView()

       self.webView = WKWebView(frame:self.containerView.frame, configuration: WKWebViewConfiguration())
       self.containerView.addSubview(webView!)
       self.containerView.clipsToBounds = true

   }

   override func viewDidLoad() {
       super.viewDidLoad()

       var url = NSURL(string:"http://google.com/")
       var req = NSURLRequest(URL:url)
       self.webView!.loadRequest(req)
   }

   func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {
       println("WebView content loaded.")
   }

}
like image 273
Darx Avatar asked Aug 26 '14 11:08

Darx


People also ask

How do I know if WKWebView is loaded?

To check if your WKWebView has loaded easily implement the following method: import WebKit import UIKit class ViewController: UIViewController, WKNavigationDelegate { let webView = WKWebView() func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

Is WKWebView the same as Safari?

WKWebView - This view allows developers to embed web content in your app. You can think of WKWebView as a stripped-down version of Safari. It is responsible to load a URL request and display the web content. WKWebView has the benefit of the Nitro JavaScript engine and offers more features.

How do I import WKWebView into Objective C?

You can implement WKWebView in Objective-C, here is simple example to initiate a WKWebView : WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init]; WKWebView *webView = [[WKWebView alloc] initWithFrame:self. view. frame configuration:theConfiguration]; webView.


1 Answers

You are not setting the navigationDelegate. Set it and it should be fine.

class ViewController: UIViewController, WKNavigationDelegate {     override func viewDidLoad() {     super.viewDidLoad()      let noLayoutFormatOptions = NSLayoutFormatOptions(rawValue: 0)      let webView = WKWebView(frame: CGRectZero, configuration: WKWebViewConfiguration())     webView.setTranslatesAutoresizingMaskIntoConstraints(false)     webView.navigationDelegate = self     view.addSubview(webView)      view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[webView]|", options: noLayoutFormatOptions, metrics: nil, views: ["webView": webView]))      view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[webView]|", options: noLayoutFormatOptions, metrics: nil, views: ["webView": webView]))      let url = NSURL(string: "http://google.com")     let request = NSURLRequest(URL: url)     webView.loadRequest(request)   }    func webView(webView: WKWebView!, didFinishNavigation navigation: WKNavigation!) {     print("Finished navigating to url \(webView.url)");   }  } 

And here is a bit better version with Swift 3.

class ViewController: UIViewController {      override func viewDidLoad() {         super.viewDidLoad()          let configuration = WKWebViewConfiguration()         let webView = WKWebView(frame: .zero, configuration: configuration)         webView.translatesAutoresizingMaskIntoConstraints = false         webView.navigationDelegate = self         view.addSubview(webView)          [webView.topAnchor.constraint(equalTo: view.topAnchor),          webView.bottomAnchor.constraint(equalTo: view.bottomAnchor),          webView.leftAnchor.constraint(equalTo: view.leftAnchor),          webView.rightAnchor.constraint(equalTo: view.rightAnchor)].forEach  { anchor in             anchor.isActive = true         }          if let url = URL(string: "https://google.com/search?q=westworld") {             webView.load(URLRequest(url: url))         }     }  }    extension ViewController: WKNavigationDelegate {      func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {         print("Finished navigating to url \(webView.url)")     }  } 
like image 68
Sandeep Avatar answered Oct 05 '22 03:10

Sandeep