web-dev-qa-db-ja.com

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}

これはとても簡単です!私は本当に愚かな何かを逃しているに違いない!

15
Rogers Sampaio

解決策が見つかりました。予想通り簡単でした。ビューがコンテンツを完全にロードする前(Dom Readyの前)にJavaScriptを追加していました。したがって、コードを以下のデリゲートメソッドに移動する必要がありました。

これが誰かの役に立つことを願っています。

28
Rogers Sampaio

問題の原因は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で可能かどうかはわかりません。

3
UKDataGeek