How can I detect when url of amp page changed with WKWebview

后端 未结 1 1366
抹茶落季
抹茶落季 2020-12-09 18:59

I\'m developing simple web browser with WKWebview. I can detect when url changed at SPA like trello with custom Javascript.

That way will not work In amp page. (Acce

相关标签:
1条回答
  • 2020-12-09 19:21

    Same issue. Unfortunately WKWebView only fires its functions when a full page load happens.

    So what we have to do instead is use Key Value Observing on the WebKit.url property.

    Looks something like this:

    import AVFoundation
    import UIKit
    import WebKit
    import MediaPlayer
    
    class ViewController: UIViewController, WKNavigationDelegate {
      @IBOutlet weak var webView: WKWebView!
    
      override func viewDidLoad() {
        super.viewDidLoad()
    
        webView.navigationDelegate = self
    
        self.webView.addObserver(self, forKeyPath: "URL", options: .new, context: nil)
        self.webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
    
        self.webView.load(URLRequest(url: "https://google.com"))
      }
    
      override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == #keyPath(WKWebView.url) {
          print("### URL:", self.webView.url!)
        }
    
        if keyPath == #keyPath(WKWebView.estimatedProgress) {
          // When page load finishes. Should work on each page reload.
          if (self.webView.estimatedProgress == 1) {
            print("### EP:", self.webView.estimatedProgress)
          }
        }
      }
    

    Each additional navigation in the wkWebkitView should cause a new combo of "### URL" and "### EP" to fire off.

    0 讨论(0)
提交回复
热议问题