Как слушать, когда WkWebkiew закончил загрузку страницы? - PullRequest
0 голосов
/ 04 января 2019

Я попытался реализовать другой код в stackoverflow без удачи.Я оцениваю javascript в WKWeview и хотел бы услышать, когда контент полностью загрузится, чтобы выполнить операторы на загруженной странице.

Javascript: (не выполняет func webView)

webView.evaluateJavaScript("_formHist.submit();", completionHandler: nil)

Код, который я пытался использовать до сих пор: (работает только на некоторых страницах)

    func webView(_ webView: WKWebView,
    didFinish navigation: WKNavigation!) {
    //insert code
    }

Я новичок в разработке для iOS, поэтому, пожалуйста, подробно объясните ответы, если можете!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Может быть, вы хотели бы сделать его гораздо более сложным и простым одновременно, чтобы вы могли показать прогресс оценки для пользователя и убедиться, что вы можете обнаружить, что все было загружено и завершено, и вы можете делать все, что захотите. вот как вы можете это сделать:

webView.addObserver(self, forKeyPath: #keyPath(WKWebView.estimatedProgress), options: .new, context: nil)

    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if keyPath == "estimatedProgress" {
            print(Float(webView.estimatedProgress))
            //Do whatever you want when finished
        }
    }
0 голосов
/ 04 января 2019

Как определяется _formHist ??

Если это уже не определено как объект javascript, оно не будет работать.

Кроме того, страница может не бытьполностью загружен во время выполнения кода, поэтому вам может потребоваться прослушать событие, которое запускается, когда страница полностью загружена

Если вы ссылаетесь на этот ответ , он говорит вам, что выможно определить, когда страница полностью загрузилась, используя следующий метод

document.addEventListener("DOMContentLoaded", function(event) { 
  //do work
});

Так что для вашего случая вам просто нужно использовать этот прослушиватель событий

webView.evaluateJavaScript("document.addEventListener("DOMContentLoaded", function(event) { _formHist.submit(); });", completionHandler: nil)

Попробуйте и посмотрите,это работает

...