Swift 3 - проверьте, загружена ли WKWebView страница
Мой вопрос: как проверить, полностью ли загружена страница в WKWebView в Xcode с помощью Swift 3?
Это моя проблема:
Веб-страница 1: На этой странице я загружаю веб-страницу 2
Веб-страница 2: Мне нужно получить html-данные с веб-страницы 2, но когда я печатаю данные HTML, я получаю HTML-данные на веб-странице 1, чего я не хочу. Но когда я печатаю данные HTML через 2 секунды, он дает мне правильные данные HTML.
Мне нужно знать, закончила ли страница в WKWebView загрузку. Я могу видеть, что в WebView он загружен, а также панель прогресса полностью загружена, но когда я печатаю html-данные страницы, я получаю html-данные предыдущей страницы, чего я не хочу. Только если я подожду секунду, он даст правильные данные, вероятно, приведет к загрузке веб-страницы 2.
Итак, как мне позволить Xcode печатать html, когда следующая страница полностью загружена?
Я пробовал несколько методов:
Возможно, я могу использовать:
если webView.isloading {get}, но я не знаю, как реализовать этот метод, и если он будет работать. Я попробовал несколько методов из Stack, но они не работают для меня или устарели.
Вы, ребята, знаете решение этой проблемы в Swift 3? Спасибо!
Ответы
Ответ 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.
}
}
- Добавить WKNavigationDelegate в класс
-
Добавлять:
func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!) { print("loaded") }
Результат: он будет печатать "загружен" в консоли каждый раз, когда WKWebView завершит загрузку страницы. Это было именно то, что я искал, так что еще раз большое спасибо Paulvs!
Ответ 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");
}
Swift 4.2
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print("Start loading")
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("End loading")
}