2011-07-27 2 views
2

자바 안드로이드 앱에서 자바 스크립트를 실행하려고하지만 동기식으로 실행해야합니다. loadUrl 및 loadData에는 반환 유형이 없으므로 WebView에서이를 수행 할 수 없습니다. 정말, 내가 무엇을 찾고있어 아이폰 OS의있는 UIWebView에 이에 ​​상응하는 뭔가 :Android에서 Java (v2.2 이상)에서 동 기적으로 javascript를 실행할 수 있습니까?

- (NSString)stringByEvaluatingJavaScriptFromString:(NSString)script 

내가 코뿔소를 사용하여 시도하지만 내 목적을 위해 너무 느리다.

감사합니다.

+0

"나는 ... 자바에서 약간의 자바 스크립트를 실행하기 위해 노력하고있어"를 기술적으로 문이 잘못된 것입니다. – Shahzeb

+0

나는 더 정확한 표현을 바꿨다. – pho0

답변

0

예. 그렇지만 WebView.addJavaScriptInterface()을 사용해야합니다.

+0

그게 @ brindy의 대답의 하위 집합이지만, 내 목적을 위해 내가 stringByEvaluatingJavaScriptFromString과 같은 동기식 자바 -> js -> java가 될 필요가 있기 때문에 내가 원하는 것을 만족시키지 못한다 : iOS에서 – pho0

+1

다른 API가 없다. 우리의 답이 아닌 다른 것을 사용하십시오. –

0

나는 동기가 있다고 생각하지만 정확하게 메모하는 것처럼 호출에서 값을 반환 할 방법이 없습니다. 댄은 첫째

, (당신의 반환 형식은 문자열이라고 가정)이 같은 간단한 클래스를 생성 ... 솔루션을 암시 :

public class MyCallback { 

    private String returnValue; 

    public void setReturnValue(String s) { 
     returnValue = s; 
    } 

    public String getReturnValue() { 
     return returnValue; 
    } 

} 

그것은 단순이 클래스를 유지하는 것이 중요하고 캡슐화 때문에 당신이 만약 ' 잠재적으로 신뢰할 수없는 소스에서 HTML을로드하면 응용 프로그램에 보안 결함이 나타날 수 있습니다. 즉, 단순히 활동을 전달하고 Javascript 호출 메소드를 직접 호출하도록 유혹하지 마십시오.

는 그런 다음 결과를 저장하기 위해 그것을 콜백의 인스턴스를 제공하고자하는 자바 스크립트를 실행합니다

WebView webView = // ... get this from somewhere 
MyCallback callback = new MyCallback(); 
webView.addJavaScriptInterface(callback, "callback"); 
webView.loadURL("javascript:callback.setReturnValue(someFunction())"); 
System.out.println("return value is " + callback.getReturnValue()); 
+1

이것은 불행히도 작동하지 않습니다. loadURL이 동기가 아니므로 loadURL이 반환 될 때 콜백에 대한 결과가 설정되지 않았습니다. – pho0

관련 문제