首页 > 解决方案 > iOS WebKit - 判断一个WebView是否已经完全加载了JS内容

问题描述

我正在尝试从第三方 URL 中解析出一些 HTML 元数据;但是,直到在WKWebView.

因此,我一直在尝试检测何时WKWebView使用 Javascript 完全加载了网页,但不幸的是我无法做到。

这是我尝试过的:

但这也不起作用,因为它是在 JS 完成加载之前执行的。

代码

这是我尝试但没有奏效的最后一种方法的代码:

初始化WKWebView

        let webView = WKWebView(frame: self.view.frame)
        webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
        webView.load(URLRequest(url: url))
        webView.navigationDelegate = self
        self.view.addSubview(webView)

处理观察者

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "estimatedProgress" {
        if let webView = object as? WKWebView, webView.estimatedProgress > 0.5 {
            print(webView.estimatedProgress)
            webView.evaluateJavaScript("document.readyState == \"interactive\"") { (isLoaded, err) in
                print(isLoaded)
                if let loaded = isLoaded as? Bool, loaded == true {
                    print("completely done loading with JS")
                }
            }
        }
    }
}

我在执行该evaluateJavaScript方法时得到的结果是false因为它执行得太早了。但我试图让观察者继续,直到isLoaded它是真的。

标签: javascriptiosswiftwebkit

解决方案


To check if your WKWebView has loaded:

import WebKit
import UIKit

class ViewController: UIViewController, WKNavigationDelegate {

  let webView = WKWebView()

  override func viewDidLoad() {
    super.viewDidLoad()
    let url = URL(string: "https://www.yourwebsite.com/") !
    let request = URLRequest(url: url)
    webView.navigationDelegate = self
    webView.load(request)
  }

func webView(_ webView: WKWebView, didStart navigation: WKNavigation!) {
    print("Strat to load")
}

  func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
     print("loaded")
     //It will print "loaded" in the console everytime the WKWebView has finished loading the page. 
  }
}

But it is per each resource, not for the whole page with all the resources. Take a look at https://stackoverflow.com/a/43172313/3857830


推荐阅读