1

我在 WebView 中运行 JS 脚本。该脚本向 WebView 发出一条消息,我想在我的应用程序中接收它。问题是在定义方法时onJSAlert没有调用,也不能使用@Override注释。
我的进口是 -

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

我像这样使用 WebView -

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");

我的 test.html 的 HTML 代码是

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

当我运行应用程序时,HTML 文件加载onProgressChanged并被调用 - 我可以看到显示“加载完成”的日志消息。当我单击加载页面上的链接时,onJSAlert没有调用 - 我没有收到日志消息,而是看到一个对话框窗口,在我的设备上弹出警报消息。
如果我尝试@Override在开头使用注释,则会onJSAlert收到错误消息 - “MainActivity.MyWebClient 类型的 onJSAlert(WebView, String, String, JsResult) 方法必须覆盖或实现超类型方法”。
有任何想法吗?

4

1 回答 1

1

如果您使用没有正确拼写的方法名称,您的方法调用将不起作用

onJSAlert

改成:

onJsAlert

于 2015-06-13T07:33:46.463 回答