android - WebChromeClient.onJsAlert() 如何显示系统对话框?
问题描述
如果 H5 在 android webview 中显示警报,我们可以重写WebChromeClient().onJsAlert()
以显示 android 对话框,如下所示:
webView.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});
我想知道在哪里显示对话框,以及如何在代码中将其关闭。
解决方案
您只需使用该方法即可
- 创建并显示
AlertDialog
- 不要忘记分别在正面或负面按钮中调用
result.confirm()
或result.cancel()
关闭对话框。OnClickListener
- 用于
return true
显示您正在处理 JS 警报。
像这样的东西:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, final String url, String message, JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setMessage(message)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.confirm();
dialog.dismiss();
}
})
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
result.cancel();
dialog.dismiss();
}
}).show();
return true;
}
});
推荐阅读
- python - 控制台网格未正确打印
- python - 努力创建一个会话,以便我可以登录到一个站点并通过 Python 转到我需要的页面
- c# - Blazor - 绑定到服务的属性,由另一个组件更改
- c++ - 使用 lower/upper_bound() 在向量中查找最接近的值
- javascript - indexOf 方法过滤器在 React 中创建了意外的输出
- matplotlib - mac os x 上 anaconda 上的 matplotlib
- c++ - 在 Winsock ws 客户端和 Websocket 服务器之间建立握手
- javascript - 如何将函数存储在具有全局范围的 Javascript 对象中
- c - 在C中的for循环中使用分号而不使用任何命令
- intellij-idea - IntelliJ Play2 设置未保存