Я написал функцию, которая должна возвращать строку HTML, которая составляет WKWebview. Однако обработчик завершения никогда не вызывается, и проект останавливается на неопределенное время. Я также уже принял протокол WKScriptMessageHandler, так что это не проблема.
public func getHTML() -> String {
var result = ""
let group = DispatchGroup()
group.enter()
DispatchQueue.main.async {
self.webView.evaluateJavaScript("document.documentElement.outerHTML.toString()", completionHandler: {(html: Any?, error: Error?) in
if (error != nil) {
print(error!)
}
result = html as! String
group.leave()
})
}
group.wait()
print("done waiting")
return result
}
Я нашел несколько примеров того, как получить html, например здесь , но я не хочу просто печатать, я хочу иметь возможность вернуть его значение. У меня нет опыта работы с DispatchQueues, но я знаю, что обработчик завершения * WKWebView JavaScript всегда выполняется в основном потоке