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?

1
  • will you please send me the updated code. thanks in advance Commented Feb 22, 2017 at 4:14

1 Answer 1

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.

Sign up to request clarification or add additional context in comments.

1 Comment

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?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.