Android WebView自定义重写js的alert和confirm对话框
程序员文章站
2022-03-01 13:23:26
...
在Amdroid应用开发过程中、经常会用到WebView去加载网页、个人一直觉得WebView的alert()对话框太丑了、所以自定义了WebView的对话框
方法是继承android.webkit.WebChromeClient实现MyWebChromeClient
在MyWebChromeClient.java中覆盖onJsAlert、onJsConfirm、onJsPrompt三个方法onJsPrompt方法可不覆盖、在初始化Webview时设置调用webview.setWebChromeClient(new MyWebChromeClient());
在Webview载入的html中使用window.alert,window.confirm,window.prompt方法、系统弹出的将是自定义实现的对应对话框、而不是系统自带的对话框
onJsAlert代码
/** * 覆盖默认的window.alert展示界面、避免title里显示为“:来自file:////” */ public boolean onJsAlert(WebView view, String url, String message, JsResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("对话框") .setMessage(message) .setPositiveButton("确定", null); // 不需要绑定按键事件 // 屏蔽keycode等于84之类的按键 builder.setOnKeyListener(new OnKeyListener() { public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { Log.v("onJsAlert", "keyCode==" keyCode "event=" event); return true; } }); // 禁止响应按back键的事件 builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。 return true; // return super.onJsAlert(view, url, message, result); }
onJsConfirm代码
/** * 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////” */ public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); builder.setTitle("对话框") .setMessage(message) .setPositiveButton("确定",new OnClickListener() { public void onClick(DialogInterface dialog,int which) { result.confirm(); } }) .setNeutralButton("取消", new OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); builder.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { result.cancel(); } }); // 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题 builder.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) { Log.v("onJsConfirm", "keyCode==" keyCode "event=" event); return true; } }); // 禁止响应按back键的事件 // builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); return true; // return super.onJsConfirm(view, url, message, result); }
最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看
源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1mgMS5ba 密码: k732
上一篇: Android流量监控模块开发源代码下载
下一篇: Android手势监听上下左右滑动识别