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}
これはとても簡単です!私は本当に愚かな何かを逃しているに違いない!
解決策が見つかりました。予想通り簡単でした。ビューがコンテンツを完全にロードする前(Dom Readyの前)にJavaScriptを追加していました。したがって、コードを以下のデリゲートメソッドに移動する必要がありました。
これが誰かの役に立つことを願っています。
問題の原因はwebView:didFinishNavigation:
ページコンテンツが実際に読み込まれる前に呼び出されています。ウェブサイトはangularjsを使用していると思います。
私はトリックを私にdするように思われた手動の遅延を導入しました:
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の「ページ準備完了」のリスナーPushイベントですが、これがwkwebviewで可能かどうかはわかりません。