5

I have written a piece of Java code which is intended as to call Java code from Javascript by a android WebView gateway.

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();
   }
}

The above code checks for web page load and once the page is finished loading, it will call javascript function which is exposed from Java so it could carry what I need from the page.

This is not working as expected what it does is simply refresh the page every few seconds. I am not sure what is wrong here?

Umair A.
  • 6,690
  • 20
  • 83
  • 130

1 Answers1

2

Well, there are lots of things that are rather strange in what you have done.

  • From Java, you are triggering Javascript...to call back into Java. You are assuming this is safe.

  • You are loading the Google home page, which will perform a redirect when it encounters an Android browser, the last time I checked.

  • You are attempting to display a Toast, yet you have no idea if that code will run on the main application thread or not.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491
  • You are right. Toast will be run on UI thread. I just got to know it's a bug in WebView which is why this is not working. I have a thread on Google Groups for Android also I need to can I uninstall emulator from version 2.3 back to 2.2? – Umair A. Feb 05 '11 at 14:35