web-dev-qa-db-ja.com

Swift 3-WKWebViewがページをロードしたかどうかを確認

私の質問WKWebViewのページがSwift 3を使用してXcodeに完全にロードされたかどうかを確認するにはどうすればよいですか?

これは私の問題です:

ウェブページ1:このページからウェブページ2をロードします

Webページ2:Webページ2からhtmlデータを取得する必要がありますが、HTMLデータを印刷すると、Webページ1のHTMLデータが取得されますが、これは望ましくありません。しかし、2秒後にHTMLデータを印刷すると、正しいHTMLデータが得られます。

WKWebViewのページの読み込みが完了したかどうかを知る必要があります。 WebViewではロードされ、プログレスバーも完全にロードされていますが、ページのhtmlデータを印刷すると、前のページのhtmlデータが得られますが、これは望んでいないものです。少し待ってから適切なデータが提供される場合にのみ、おそらくWebページ2が読み込まれます。

次のページが完全にロードされたときにXcodeでhtmlを印刷するにはどうすればよいですか?

私はいくつかの方法を試しました:

たぶん私は使用できます:

if webView.isloading {get}が、このメソッドを実装する方法と、それが機能するかどうかがわかりません。 Stackからいくつかの方法を試しましたが、これらは私には機能しませんし、時代遅れです。

Swift 3でこの問題の解決策を知っていますか?ありがとう!

21
Stef

回答(@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に再び感謝します!

42
Stef

デリゲートの設定> 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!) {
    print("Start loading")    
}

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