WebChromeClient OnJSAlert is not called

2k views Asked by At

I'm running a JS script in a WebView. The script alerts a message to the WebView, and I want to receive it in my app. The problem is that onJSAlert is not called nor I can use @Override annotaion when definig the method.
My imports are -

import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.JsResult;
import android.webkit.WebSettings;

I use the WebView like this -

webView = (WebView)findViewById(R.id.webView1); 
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            if (newProgress == 100) {
            Log.d("fibi", "finished loading");
            }
        }
        //@Override //If I uncomment this I get compilation error
        public boolean onJSAlert(WebView view, String url, String message, final JsResult result) {
            encResult = message;
            Log.d("fibi", encResult);
            result.cancel();
            return true;                
        }
    });
webView.loadUrl("file:///android_asset/test.html");

And my HTML code for test.html is

 <html>
   <body >
     <div onclick="alert('CLICK')"> Click Me !!  </div>
   </body>
</html>

When I run the app, the HTML file loads and the onProgressChanged is been called - I can see the log message that says "finished loading". When I click on the link at the loaded page, the onJSAlert is not called - I don't get the log message and instead I can see a dialog window that pops on my device with the alert message.
If I try to use the @Override annotaion at the beginning of the onJSAlert, I get error - "The method onJSAlert(WebView, String, String, JsResult) of type MainActivity.MyWebClient must override or implement a supertype method".
Any ideas?

1

There are 1 answers

0
Sestertius On BEST ANSWER

If you use a method name without the proper spelling, your method calls will not work

onJSAlert

Change to:

onJsAlert