execute Javascript не вызывает завершениеHandler, когда внутри DispatchQueue - PullRequest
0 голосов
/ 07 января 2020

Я написал функцию, которая должна возвращать строку 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 всегда выполняется в основном потоке

...