WebView 不会在 Lollipop 设备上显示 JSAlert
WebView doesn't show JSAlert on Lollipop devices
它没有在任何设备上显示 JSAlert。然后我设置了一个 WebChromeClient:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
return super.onJsPrompt(view, url, message, defaultValue,
result);
}
});
现在它可以在所有 Lollipop 之前的设备上正常运行。并且不会在 Lollipop 设备上显示任何警报。
Logcat 说“无法创建对话框,WebView 上下文不是 Activity”。
需要先申请权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
如果您使用 Jscript 在 webview 中打开。您可以像这样创建对话框
在你的 jscript
中写这段代码
<input type="button" value="Display dialog" onClick="displayDialog()" />
<script>
function displayDialog() {
//alert("Javascript Dialog");
Android.showDialog();
}
</script>
</input>
或者在 webview 中创建对话框的一种非常简单的方法
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
mResult = result;
AlertDialog dialog = new AlertDialog.Builder(MyService.this)
.setTitle("test Dialog")
.setMessage("This is test dialog")
.setOnCancelListener(new CancelListener())
.setNegativeButton("Cancel", new CancelListener())
.setPositiveButton("Ok", new PositiveListener())
.create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show();
return true;
}
});
最后一件事,如果以上这些不起作用您需要以编程方式在布局中创建自定义对话框,并在其中添加您的视图。喜欢
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT
WindowManager.LayoutParams.TYPE_PHONE,
0,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER;
windowManager.addView(yourView, params);
请分享您用于构建 WebView 的代码。听起来您正在使用服务或应用程序上下文而不是 Activity.
来构建它
请尝试使用 Activity 上下文。
WebView 版本 40 中引入了一个错误,并在版本 42 中修复。
检查
报告的问题
它没有在任何设备上显示 JSAlert。然后我设置了一个 WebChromeClient:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}
@Override
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, JsPromptResult result) {
return super.onJsPrompt(view, url, message, defaultValue,
result);
}
});
现在它可以在所有 Lollipop 之前的设备上正常运行。并且不会在 Lollipop 设备上显示任何警报。
Logcat 说“无法创建对话框,WebView 上下文不是 Activity”。
需要先申请权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
如果您使用 Jscript 在 webview 中打开。您可以像这样创建对话框 在你的 jscript
中写这段代码<input type="button" value="Display dialog" onClick="displayDialog()" />
<script>
function displayDialog() {
//alert("Javascript Dialog");
Android.showDialog();
}
</script>
</input>
或者在 webview 中创建对话框的一种非常简单的方法
webView.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
mResult = result;
AlertDialog dialog = new AlertDialog.Builder(MyService.this)
.setTitle("test Dialog")
.setMessage("This is test dialog")
.setOnCancelListener(new CancelListener())
.setNegativeButton("Cancel", new CancelListener())
.setPositiveButton("Ok", new PositiveListener())
.create();
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
dialog.show();
return true;
}
});
最后一件事,如果以上这些不起作用您需要以编程方式在布局中创建自定义对话框,并在其中添加您的视图。喜欢
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT
WindowManager.LayoutParams.TYPE_PHONE,
0,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER;
windowManager.addView(yourView, params);
请分享您用于构建 WebView 的代码。听起来您正在使用服务或应用程序上下文而不是 Activity.
来构建它请尝试使用 Activity 上下文。
WebView 版本 40 中引入了一个错误,并在版本 42 中修复。
检查
报告的问题