WKWebview evaluateJavascript не работает, выдает ошибку


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

Это так просто! Должно быть, я упустил что-то действительно глупое!

2 14

2 ответа:

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

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

Я обнаружил, что проблема была вызвана вызовом 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 "page ready", но я не уверен, что это возможно в wkwebview.