webview js alert()提示执行失效解决方法
2014-12-25 12:53:58  By: dwtedx

今天在项目中用到WebView、网页里面使用了JS的alert()方法、在配置了webview的setting属性后、发现JS的alert()方法不能正常提示、即使设置了以下属性也不行

代码如下

webSettings.setJavaScriptEnabled(true);

webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

webSettings.setAllowFileAccess(true);// 设置允许访问文件数据

webSettings.setSupportZoom(true);

webSettings.setBuiltInZoomControls(true);

webSettings.setJavaScriptCanOpenWindowsAutomatically(true);

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

webSettings.setDomStorageEnabled(true);

webSettings.setDatabaseEnabled(true);

解决办法:

webview只是一个承载体、各种内容的渲染需要使用webviewChromClient去实现、所以set一个默认的基类WebChromeClient就行

代码如下:

mWebView.setWebChromeClient(new MyWebChromeClient());

之所以不直接使用WebChromeClient、是因为WebChromeClient的alert()效果不是很好看、一定会和你App的风格不统一、需要进行封装、继承WebChromeClient类、对js弹出框时间进行处理

MyWebChromeClient代码如下

final class MyWebChromeClient extends WebChromeClient {
//处理alert弹出框
@Override
public boolean onJsAlert(WebView view,String url,
String message,JsResult result) {
Log.d(LOG_TAG,"onJsAlert:" message");
mReusultText.setText("Alert:" message);
//对alert的简单封装
new AlertDialog.Builder(WebViewDemo.this).
setTitle("Alert").setMessage(message).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
//TODO
}
}).create().show();
result.confirm();
return true;
}
//处理confirm弹出框
@Override
public boolean onJsConfirm(WebView view, String url, String message,
JsResult result) {
Log.d(LOG_TAG, "onJsConfirm:" message);
mReusultText.setText("Confirm:" message);
result.confirm();
return super.onJsConfirm(view, url, message, result);
}
//处理prompt弹出框
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
Log.d(LOG_TAG,"onJsPrompt:" message);
mReusultText.setText("Prompt input is :" message);
result.confirm();
return super.onJsPrompt(view, url, message, message, result);
}
}

这样就可以完美的解决WebView的JS alert()问题、希望对大家有帮助

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+