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 ответа:
Нашел решение, оно было простым, как я и ожидал, я добавлял javascript до того, как представление завершит загрузку содержимого (до того, как Dom будет готов). Поэтому мне просто пришлось переместить свой код в метод делегата ниже:
- webView: didFinishNavigation: (from WKNavigationDelegate)
Я надеюсь, что это кому-то поможет.
Я обнаружил, что проблема была вызвана вызовом
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.