h5在移动端弹出提示有时需要在移动端进行拦截处理,显示移动端的UI并返回处理结果,那么既然需要显示h5就需要用webview进行加载,加载后如何拦截,需要设置webview 的setWebChromeClient方法并重写WebChromeClient的onJsAlert、onJsConfirm 和onJsPrompt与h5的弹出类型相对应,具体代码如下
android端
webview.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("")
.setMessage(message)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
})
.setCancelable(false)
.create()
.show();
return true;
}
@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("")
.setMessage(message)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
})
.setCancelable(false)
.create()
.show();
return true;
}
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {
final EditText et = new EditText(view.getContext());
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle("")
.setMessage(message)
.setView(et)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm(et.getText().toString());
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
})
.setCancelable(false)
.create()
.show();
return true;
}
});
还需要设置一些属性支持js
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);// 支持JS
h5
<!DOCTYPE html>
<html>
<head>
<title>我的测试</title>
<meta charset="utf-8">
<script type="text/javascript">
function toast(){
alert("弹窗");
}
function toast_confirm(){
var result = confirm("确定要退出吗?");
if (result) {
console.log("点了确定");
} else {
console.log("点了取消");
}
}
function toast_prompt(){
var result = prompt("请输入", "");
if (result) {
console.log("点了确定 获取输入的结果=" + result);
} else if (result === "") {
console.log("点了确定但是没有输入内容");
} else {
console.log("点了取消");
}
}
</script>
</head>
<body>
<button onclick="toast()">点击弹窗alert</button>
<br/>
<button onclick="toast_confirm()">点击弹窗confirm</button>
<br/>
<button onclick="toast_prompt()">点击弹窗prompt</button>
</body>
</body>
</html>