WebView не отображает всплывающее окно

#android #android-webview

#Android #android-webview

Вопрос:

У меня был сценарий, в котором мне нужно отобразить URL-адрес на веб-странице.
URL содержит всплывающее окно, которое не отображается, и вместо всплывающего окна отображается пустой экран.
пожалуйста, найдите ниже мою реализацию:

      webView = (WebView) instamedWebView.findViewById(R.id.webView);<br>
     WebSettings settings = webView.getSettings();
    settings.setBuiltInZoomControls(true);
    settings.setUseWideViewPort(true);
    settings.setJavaScriptEnabled(true);
    settings.setSupportMultipleWindows(true);
    settings.setJavaScriptCanOpenWindowsAutomatically(true);
    settings.setLoadsImagesAutomatically(true);
    settings.setDomStorageEnabled(true);
    settings.setLoadWithOverviewMode(true);
     settings.setAllowFileAccess(true);
    settings.setJavaScriptCanOpenWindowsAutomatically(true);

try {
    String url = "https://ppay-dev.com/Payment/abc.aspx";
    String postData = String postData = "amount="   URLEncoder.encode(userName, "UTF-8")   "amp;FirstName="   URLEncoder.encode(password, "UTF-8");
        webView.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url) {

            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {


            }
        });
        webView.postUrl(url,postData.getBytes());
        webView.setWebChromeClient(new WebChromeClient(){
            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                return super.onJsAlert(view, url, message, result);
            }
        });
   catch (Exception e){
        e.printStackTrace();
    }
 

Может кто-нибудь подсказать мне, как отображать всплывающие окна в Android WebView

Комментарии:

1. Вы видите всплывающее окно, когда заходите на этот сайт из браузера по умолчанию на своем мобильном устройстве или просто когда заходите на него со своего ПК?

2. можете ли вы показать снимок экрана всплывающего окна? это модальное или оповещение?

3. Как отображается всплывающее окно?

Ответ №1:

Возможно, вы можете попытаться переопределить веб-оповещение на собственное оповещение. Это работает для меня.

 webview.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                Log.i("TITLE", title);
            }

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }

            // OVERRIDE WEB CONFIRM ALERT TO NATIVE ALERT
            @Override
            public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
                new AlertDialog.Builder(VideoTutorial.this)
                        .setTitle("DOMINOS SAYS:")
                        .setMessage(message)
                        .setPositiveButton(android.R.string.ok, (dialog, which) -> result.confirm())
                        .setNegativeButton(android.R.string.cancel, (dialog, which) -> result.cancel())
                        .create().show();

                return true;
            }

            // OVERRIDE WEB ALERT TO NATIVE ALERT
            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {

                new AlertDialog.Builder(VideoTutorial.this)
                            .setTitle("DOMINOS SAYS:")
                            .setMessage(message)
                            .setPositiveButton(android.R.string.ok,
                                    (dialog, which) -> result.confirm())
                            .create().show();
                return true;
            }

            // OVERRIDE WEB PROMPT ALERT TO NATIVE ALERT PROMPT
            @Override
            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {
                new MaterialDialog.Builder(VideoTutorial.this)
                        .title("DOMINOS SAYS:")
                        .content(message)
                        .inputType(InputType.TYPE_CLASS_TEXT)
                        .inputRangeRes(2, 20, R.color.dominoRed)
                        .input("No 1 Pizza Fav", "", (dialog, input) -> result.confirm(input   ""))
                        .positiveText("OK")
                        .negativeText("CANCEL")
                        .onNegative((dialog, which) -> result.cancel())
                        .show();

                return true;
            }
        });
 

Ответ №2:

Говорят, что он использует WebChromeClient и переопределяет метод onJsAlert() . Вот пример кода.

 WebView wv=new WebView(this);   
wv.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onJsAlert(WebView view, String url, String message,JsResult result) {
                //Required functionality here
                return super.onJsAlert(view, url, message, result);
       }
 

Это ссылка для получения дополнительной информации.

Ответ №3:

Вместо переопределения onJsAlert просто используйте:

 WebView wv = new WebView(this); 
wv.setWebChromeClient(new WebChromeClient());