它没有在任何设备上显示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);
}
});
现在它适用于所有pre-Lollipop设备。并且不会在Lollipop设备上显示任何警报。
Logcat说" 无法创建对话框,WebView上下文不是活动"。
答案 0 :(得分:4)
答案 1 :(得分:0)
首先需要获得许可
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
如果您使用Jscript在webview中打开。您可以像这样创建Dialog 在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;
}
});
如果以上这些不起作用,最后一件事您需要以编程方式在Layout中创建自定义对话框并在此处添加您的视图。像
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);
答案 2 :(得分:0)
请分享您用于构建WebView的代码。听起来您正在使用服务或应用程序上下文而不是活动来构建它。
请尝试使用活动上下文。