остановить загрузку в webViewClient

в моем WebView у меня есть несколько ссылок в заголовке. В автономном режиме я не должен разрешать перезагрузить страницу и сохранить эту страницу как есть, а затем сообщить пользователям о подключении к интернету. Я могу поймать ссылки, прежде чем он загружается с помощью shouldOverrideUrlLoading если я нажимаю на другие ссылки. Но если я нажму на ту же ссылку,shouldOverrideUrlLoading не увольняется, вместо этого,onLoadResource метод вызывается первым. В этом методе я пробовал webView.stopLoading(); но он продолжает работать и огня onReceivedError метод и показывает отчет об ошибке на странице.

вот мой WebClient:

webView.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if(MyApplication.getInstance().isOnline()) {
                return false;
            }

            Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show();
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            Log.i("ON_PAGE_START", "RUNNING ============>" + url);
            if (MyApplication.getInstance().isOnline()) {
                super.onPageStarted(view, url, favicon);
            } else {
                webView.stopLoading();
            }
        }

        @Override
        public void onLoadResource(WebView view, String url) { 

            if (MyApplication.getInstance().isOnline()) {
                super.onLoadResource(view, url);
            } else {
                webView.stopLoading();                  
            }
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {               

            view.stopLoading();

            Toast.makeText(getApplicationContext(), "Please check Internet connection and try again.", Toast.LENGTH_SHORT).show();
            super.onReceivedError(view, errorCode, description, failingUrl);    
        }
    });

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

3 ответов


Это известная проблема, и для нее есть ошибка. http://code.google.com/p/android/issues/detail?id=2887

был предложен ряд обходных путей. например,

  1. переопределить onPageStarted
  2. Добавить JavascriptInterface по CommonsWare
  3. отключить события касания WebView

кроме того, зарегистрируйте BroadcastReceiver для прослушивания сети состояние изменяется и применяется обходной путь при потере подключения. прослушиватель сети Android


Я знаю, это довольно старый пост, но спасибо за этот пост, это помогло мне решить проблему!!!

У меня была аналогичная проблема и stopLoading решить мою проблему :)

shouldOverrideUrlLoading вызывается, если он переходит на новую страницу или если есть перенаправление, но не иначе, как для ex, нажав на iframe и т. д. Я хотел добиться аналогичного поведения в своем приложении, и я понял, что onPageStarted называется, но не shouldOverrideUrlLoading.

Я не переопределить onLoadResource но просто onPageStarted с onLoadResource вызывается после onPageStarted. OnPageStarted проверяет, отключен ли он и не загружается в этом случае. надеюсь, это кому-то поможет.


Я думаю в onLoadRessource(..) и onPageStarted () это дальше должно быть

view.stopLoading();

в вашем else{..}