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?
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With