Интерфейс js для веб-просмотра Android не работает на Android 4.4 - PullRequest
0 голосов
/ 05 марта 2019

В моем приложении для Android у меня есть экран с WebView.

Логика этого экрана: пользователь нажимает кнопку поиска.Веб-просмотр открывался с помощью URL "https://xn - 90adear.xn - p1ai / check / auto ".JS-скрипт ищет переменную appVehicleCheck.reCaptchaToken, а затем приложение отправляет другой запрос в мой API.

Это прекрасно работает на любом Android, кроме Android 4.4 (API 19).Я получил эту ошибку: I / chromium: [INFO: CONSOLE (1)] "Uncaught TypeError: Невозможно прочитать свойство 'длина' из неопределенного", источник: https://xn - 90adear.xn - p1ai / assets /js / ext.js? 201808012357 (1)

Мой код:

    private void reloadWebView() {
        dismissProgressDialog();
        progressView.setVisibility(View.VISIBLE);
        captchaWebView.loadUrl(URL_GET_GIBDD);
        captchaWebView.getSettings().setJavaScriptEnabled(true);
        captchaWebView.getSettings().setDomStorageEnabled(true);
        captchaWebView.getSettings().setLoadsImagesAutomatically(false);
        captchaWebView.addJavascriptInterface(new JavaScriptInterface(captchaWebView), "AutoinsInterface");
        captchaWebView.setWebViewClient(new AutoinsWebViewClient());
}

public class AutoinsWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }

        public void onReceivedError(android.webkit.WebView view, WebResourceRequest request, WebResourceError error) {
            view.stopLoading();
            captchaWebView.setVisibility(View.GONE);
            final RelativeLayout samplesMain = (RelativeLayout) findViewById(R.id.root_layout);
            mSnackbar = Snackbar.make(samplesMain, FullReportActivity.this.getResources().getString(R.string.insurance_error), Snackbar.LENGTH_INDEFINITE)
                    .setAction("Action", null)
                    .setDuration(2000);
            mSnackbar.show();
            progressView.setVisibility(View.GONE);
        }

        public void onReceivedSslError(android.webkit.WebView view, SslErrorHandler handler, SslError er) {
            SslErrorHandler sslErrorHandler = handler;
            if (er.getUrl().equals(URL_GET_GIBDD)) {
                sslErrorHandler.proceed();
            } else {
                sslErrorHandler.cancel();
            }
            progressView.setVisibility(View.GONE);
        }

        public void onPageFinished(android.webkit.WebView view, String url) {
            super.onPageFinished(view, url);
            if (url.equals(URL_GET_GIBDD)) {
                if (url.equals(URL_GET_GIBDD)) {
                    view.loadUrl("javascript:$('.ln-header').hide()");
                    view.loadUrl("javascript:$('.ln-footer').hide()");
                    view.loadUrl("javascript:$('.bn-federal-site').hide()");
                    view.loadUrl("javascript:$('.bn-top-menu').hide()");
                    view.loadUrl("javascript:$('.ln-content-right').hide()");
                    view.loadUrl("javascript:$('.widget-mistake').hide()");
                    view.loadUrl("javascript:$('.b-mobile-section').hide()");
                    view.loadUrl("javascript:$('h1,h2').hide()");
                    view.loadUrl("javascript:$('.ln-page').hide()");

                    view.loadUrl("javascript:getCookie = function(name) {\n" +
                            "                    var r = document.cookie.match(\"\\\\b\" + name + \"=([^;]*)\\\\b\");\n" +
                            "                    return r ? r[1] : null;\n" +
                            "                };\n" +
                            "\n" +
                            "                var session = getCookie('session');" );

                    view.loadUrl("javascript:var int; int = setInterval(function(){if(appVehicleCheck.reCaptchaToken.length > 0){ window.AutoinsInterface.make(appVehicleCheck.reCaptchaToken, session); clearInterval(int); } },1000);");
                }
            }
        }
    }

    public class JavaScriptInterface {
        private WebView webView;

        public JavaScriptInterface(WebView webView) {
            this.webView = webView;
        }

        @JavascriptInterface
        public void make(String captcha_answer, String sessionId) throws Exception {
            if (captcha_answer != null && captcha_answer.length() > 0) {

                /* url, captcha, checktype, vin*/
                ArrayList<String> passing = new ArrayList<String>();
                passing.add(vinNumber);
                passing.add(sessionId);
                passing.add(captcha_answer);

                progressView.setVisibility(View.VISIBLE);
                sendGibddRequest = new SendGibddRequest();

                try {
                    sendGibddRequest.execute(passing);
                } catch (Exception e) {
                    e.printStackTrace();
                }

            } else {
                captchaWebView.setVisibility(View.GONE);
                progressView.setVisibility(View.GONE);
            }
        }
    }

Не понимаю, почему эта проблема только на Android 4.4?

Я уже пытался использовать view.evaluateJavascript () вместо view.loadUrl ().И это не помогло.

Также у меня проблема с слишком большим количеством вызовов onPageFinished на некоторых устройствах.Я не воспроизводил эту проблему сам, но я вижу это в Аналитике.Может быть, кто-то может помочь мне с этим.

...