1

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?

TDG
  • 5,909
  • 3
  • 30
  • 51
  • Thank you for including the setJavaScriptEnabled in your example, that was the missing piece for me to figure out why my alerts were not working (and obvious now, also none of my JavaScript). – eselk Jun 17 '15 at 16:19

1 Answers1

1

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

onJSAlert

Change to:

onJsAlert

Sestertius
  • 1,367
  • 1
  • 14
  • 13