Оценка WKWebviewJavascript не работает, выдает ошибку

Я пытаюсь вызвать существующую функцию с удаленного сайта в WKWebview:

function addtext (text) {
 jQuery("#webviewtest").html(text);
}

С

[self.WebView evaluateJavaScript:@"addtext(\"This is a text from app\");" completionHandler:^(id Result, NSError * error) {
    NSLog(@"Error -> %@", error);
}];

Но это вызывает ошибку:

Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x170c788c0 {NSLocalizedDescription=A JavaScript exception occurred}

Это так просто! Я должен упустить что-то действительно глупое!

Ответ 1

Нашел решение, это было просто, как я ожидал, я добавлял javascript до того, как представление полностью загрузило контент (перед Домом Ready). Поэтому мне просто пришлось перенести мой код на метод делегата:

Я надеюсь, что это поможет кому-то.

Ответ 2

Я обнаружил, что проблема была вызвана вызовом webView:didFinishNavigation: до загрузки страницы. Я думаю, что сайт использует angularjs.

Я представил ручную задержку, которая показалась мне трюком:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("loaded)")
        //abtn_run(UIButton())
        self.perform(#selector(performAction), with: nil, afterDelay: 3.0)


    }

и сделал мой звонок здесь:

  func performAction() {
            //This function will perform this after delay of 3 seconds
    }

В идеале лучшее решение будет иметь слушатель, который нажимает событие для angularjs "готовность страницы", но я не уверен, что это возможно в wkwebview.