12

나는 WKWebview에 원격 사이트에서 존재하지 않는 함수를 호출하는 것을 시도하고있다 :WKWebview evaluateJavascript가 작동하지 않는 것은 오류를 발생

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} 

이것은 매우 간단합니다! 나는 정말로 바보 같은 것을 놓치고 있어야합니다!

+0

해당 페이지에 jQuery가로드되어 있습니까? – AstroCB

+0

네, 완벽한 기능을 갖춘 웹 사이트입니다. 페이스 북 로그인 작업을 할 수 있도록 다리를 쌓고 있습니다. 또한이 기능은 브라우저에서 정상적으로 전화를 걸 때 작동합니다. –

+0

jQuery없이 시도하십시오 :'document.getElementById ('webviewtest'). innerHTML = text;'. html 메소드가 실패 할 수도 있습니다. – Pinal

답변

27

해결책을 찾았는데 기대했던 것처럼 간단했습니다.보기가 완료되기 전에 DOM 준비가 완료되기 전에 javascript를 추가하고있었습니다.

나는이 사람을 도움이되기를 바랍니다 (WKNavigationDelegate에서) :

  • 웹보기 : didFinishNavigation 그래서 난 그냥 아래의 대리자 메서드에 내 코드를 이동했다.

+0

이것은 해결책입니다! 끔찍하지만 시간을 많이 절약 해줘서 고마워. –

+0

나를 위해 일하지 않습니다. – Jitendra

+0

델리게이트를 구현 했습니까? –

3

페이지 콘텐츠가 실제로로드되기 전에 webView:didFinishNavigation:이 호출되어이 문제가 발생했음을 발견했습니다. 나는 웹 사이트가 angularjs를 사용하고 있다고 생각한다.

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

이상적으로 가장 좋은 방법은 청취자가 이벤트를 밀어 것 :

나는 나를 위해 D 트릭에 보였다 수동 지연 소개 : 여기 내 전화가

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


    } 

을과했다 angularjs "준비 페이지"하지만 wkwebview에서 이것이 가능한지 확신하지 못합니다.