Swift 3 - 检查WKWebView是否加载了页面

时间:2017-08-01 22:09:10

标签: swift xcode swift3 webkit wkwebview

我的问题如何使用Swift 3检查WKWebView中的页面是否已在Xcode中完全加载?

这是我的问题:

网页1: 从这个页面我加载网页2

网页2: 我需要从网页2获取html数据,但是当我打印HTML数据时,我得到网页1的HTML数据,这是我不想要的。但是当我在2秒后打印HTML数据时,它会为我提供正确的HTML数据。

我需要知道WKWebView中的页面是否完成加载。我可以在WebView中看到它已加载并且进度条已完全加载,但是当我打印页面的html数据时,我得到上一页的html数据,这不是我想要的。只有当我等待一秒钟它才能提供正确的数据,可能导致网页2被加载。

那么当下一页完全加载时,如何让Xcode打印html?

我尝试了几种方法:

也许我可以使用:

如果webView.isloading {get} 但我不知道如何实现这个方法,如果它应该工作。 我已经尝试过Stack中的几种方法,但这些方法对我不起作用或过时。

你们在Swift 3中知道这个问题的解决方案吗? 谢谢!

2 个答案:

答案 0 :(得分:36)

回答(非常感谢@paulvs)

要检查您的WKWebView是否已加载,请轻松实现以下方法:

import WebKit
import UIKit


class ViewController: UIViewController, WKNavigationDelegate {


  let webView = WKWebView()


  func webView(_ webView: WKWebView,
    didFinish navigation: WKNavigation!) {
    print("loaded")
  }

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


    // Do any additional setup after loading the view, typically from a nib.
  }

}
  1. 将WKNavigationDelegate添加到类
  2. 添加:func webView(_ webView:WKWebView, didFinish navigation:WKNavigation!){ 打印("已加载")}
  3. 结果:它将打印"已加载"每当WKWebView完成加载页面时,在控制台中。这正是我想要的,所以再次非常感谢Paulvs!

答案 1 :(得分:1)

  

设置代表> WKNavigationDelegate

Objective-C

// Start loading WKWebView
-(void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
    NSLog(@"Start loading");
} 

//Finished loading WKWebView
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
    NSLog(@"End loading");
}

Swift 4.2

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
    NSLog(@"Start loading");    
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
    NSLog(@"End loading");
}