web-dev-qa-db-fra.com

WKWebview assessJavascript ne fonctionne pas, génère une erreur

J'essaie d'appeler une fonction existante à partir d'un site distant dans un WKWebview:

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

Avec:

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

Mais cela lance une erreur:

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

C'est tellement simple! Je dois manquer quelque chose de vraiment stupide!

15
Rogers Sampaio

J'ai trouvé une solution, c'était simple comme je m'y attendais, j'ajoutais le javascript avant que la vue complète ne charge le contenu (avant le Dom Ready). J'ai donc juste dû déplacer mon code vers la méthode déléguée ci-dessous:

J'espère que ça aidera quelqu'un.

28
Rogers Sampaio

J'ai trouvé que le problème était dû au webView:didFinishNavigation: appelé avant le chargement du contenu de la page. Je pense que le site Web utilise angularjs.

J'ai introduit un retard manuel qui m'a semblé être l'astuce:

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

et a fait mon appel ici:

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

Idéalement, la meilleure solution serait d'avoir un auditeur Poussez un événement pour angularjs "page ready" mais je ne suis pas sûr que ce soit possible dans wkwebview.

3
UKDataGeek