2011-02-05 4 views
4

Javascript에서 Java 코드를 호출하기위한 Java 코드를 Android WebView 게이트웨이에서 작성했습니다.Javascript에서 Android WebView로 데이터 전달

webView = (WebView) findViewById(R.id.captchaView); 
WebSettings ws = webView.getSettings(); 
ws.setJavaScriptEnabled(true); 
webView.loadUrl("https://google.com/"); 

webView.setWebViewClient(BrowserHandler); 
webView.addJavascriptInterface(new IJavascriptHandler(), "cpjs"); 

WebViewClient BrowserHandler = new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     view.loadUrl("javascript:window.cpjs.onPageLoaded(document.body.innerHTML);void(0);"); 
    } 
}; 

final class IJavascriptHandler { 
    IJavascriptHandler() { 
    } 

    public void onPageLoaded(String html) { 
     // this is called from JS 
     Toast t = Toast.makeText(getApplicationContext(), "Yes", 2000); 
     t.show(); 
    } 
} 

웹 페이지로드 및 페이지로드가 완료되면, 그것은 내가 페이지에서 필요한 것을 수행 할 수 있도록 자바에서 노출되는 자바 스크립트 함수를 호출 위의 코드를 확인합니다.

예상대로 작동하지 않습니다. 단순히 몇 초마다 페이지를 새로 고치는 것입니다. 내가 뭘 잘못했는지 모르겠다.

+0

업데이트 된 코드를 보내주십시오. 미리 감사드립니다 –

답변

2

글쎄, 당신이 한 일에는 다소 이상한 것들이 많이 있습니다.

  • Java에서 자바로 다시 호출하기 위해 자바를 트리거하고 있습니다. 당신은 이것이 안전하다고 가정하고 있습니다.

  • Google 홈 페이지를로드하고 있습니다. Google 홈 페이지를로드하는 중, 마지막으로 확인한 시간에 Android 브라우저가 나타나면 리디렉션됩니다.

  • Toast을 표시하려고하지만이 코드가 기본 응용 프로그램 스레드에서 실행되는지 여부는 알 수 없습니다.

+0

당신 말이 맞아요. 토스트는 UI 스레드에서 실행됩니다. WebView에서 버그가 있다는 것을 알아야합니다. 이것이 작동하지 않는 이유입니다. Android 용 Google 그룹스에 스레드가 있습니다. 버전 2.2에서 2.2로 에뮬레이터를 제거 할 수 있습니까? – Neutralizer

관련 문제