【问题标题】:Swift 3 - Check if WKWebView has loaded pageSwift 3 - 检查 WKWebView 是否已加载页面
【发布时间】:2018-01-08 22:44:27
【问题描述】:

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

这是我的问题:

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

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

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

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

我尝试了几种方法:

也许我可以使用:

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

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

【问题讨论】:

  • 在您链接的第一个问题中,它提到了WKNavigationDelegatefunc webView(WKWebView, didFinish: WKNavigation!) 的使用,他们有帮助吗?
  • 您好,感谢您的回复。它对我没有帮助,但也许我不知道如何以正确的方式实现这些方法。你知道如何实现这个方法:developer.apple.com/documentation/webkit/wknavigationdelegate/…
  • 要使用该方法,使您的视图控制器类符合WKNavigationDelegate 协议,然后在您的视图控制器类中实现该方法。网上应该有例子such as this
  • 谢谢@paulvs!不知道从苹果文档中实现一个方法这么容易!
  • @Stef 你应该将你的问题标记为已回答:)

标签: swift xcode swift3 webkit wkwebview


【解决方案1】:

回答(非常感谢@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!) { print("loaded") }
    

结果:每次 WKWebView 完成加载页面时,它都会在控制台中打印“已加载”。这正是我想要的,再次感谢 Paulvs!

【讨论】:

  • 这是不正确的,它是针对每个资源的,但不是针对具有所有资源的整个页面;
  • 还有可能需要额外处理的重定向
  • 错过了添加这一行:webView.navigationDelegate = self; -- 添加后完美运行!
【解决方案2】:

设置委托> 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");
}

斯威夫特 4.2

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2011-10-28
    • 2015-04-25
    相关资源
    最近更新 更多