I am trying to call an existent function from a remote site in a WKWebview:
function addtext (text) {
jQuery("#webviewtest").html(text);
}
With:
[self.WebView evaluateJavaScript:@"addtext(\"This is a text from app\");" completionHandler:^(id Result, NSError * error) {
NSLog(@"Error -> %@", error);
}];
But this is throwing an error:
Error Domain=WKErrorDomain Code=4 "A JavaScript exception occurred" UserInfo=0x170c788c0 {NSLocalizedDescription=A JavaScript exception occurred}
This is so simple! I am must missing something really stupid!
Found a solution, it was simple as I was expecting, I was adding the javascript before the view complete load the content (before the Dom Ready). So I just had to move my code to the delegate method below:
- webView:didFinishNavigation: (from WKNavigationDelegate)
I hope this helps someone.
I found that the problem was caused by the webView:didFinishNavigation:
being called before the page content was actually loaded. I think the website is using angularjs.
I introduced a manual delay which seemed to d the trick for me :
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("loaded)")
//abtn_run(UIButton())
self.perform(#selector(performAction), with: nil, afterDelay: 3.0)
}
and did my call here:
func performAction() {
//This function will perform this after delay of 3 seconds
}
Ideally the best solution would have a listener push an event for angularjs "page ready" but I am not sure this is possible in wkwebview.