WebView不会在Lollipop设备上显示JSAlert

时间:2015-04-09 05:47:23

标签: android webview android-5.0-lollipop

它没有在任何设备上显示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上下文不是活动"。

3 个答案:

答案 0 :(得分:4)

WebView版本40中引入了一个错误,并在版本42中修复。

检查

报告的问题

https://code.google.com/p/chromium/issues/detail?id=478204

答案 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的代码。听起来您正在使用服务或应用程序上下文而不是活动来构建它。

请尝试使用活动上下文。