最近在使用 WebView 的 onJsAlert 方法后,发现html页面点击没反应了,代码如下:
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
if(message!=null){
//TODO
//弹出对话框
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
return true;
}
@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
// TODO Auto-generated method stub
return super.onJsConfirm(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
// TODO Auto-generated method stub
return super.onJsPrompt(view, url, message, defaultValue, result);
}
});
百思不得其解,最后在stackoverflow上找到了答案
http://stackoverflow.com/questions/15892644/android-webview-after-onjsalert-not-responding-taps
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
if(message!=null){
//TODO
//弹出对话框
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
}
result.cancel(); //一定要cancel,否则会出现各种奇怪问题
return true;
}
@Override
public boolean onJsConfirm(WebView view, String url,
String message, JsResult result) {
// TODO Auto-generated method stub
return super.onJsConfirm(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
// TODO Auto-generated method stub
return super.onJsPrompt(view, url, message, defaultValue, result);
}
});
return true 和 result.cancel(); 一个都不能少,否则会出现各种奇怪的问题。