Как очистить содержимое предыдущего WebView перед загрузкой следующего WebView? - PullRequest
20 голосов
/ 20 января 2012

Мой сценарий изначально заключается в том, что я загружаю WebView, а затем загружаю тот же WebView с другим URL.

Моя проблема заключается в том, что при загрузке следующего URL я вижу содержимое ранее загруженного URLи затем отображается мое текущее загруженное содержимое URL.

Я хочу очистить содержимое всякий раз, когда загружаю другой URL.

Скажем,

if (pos == 0) {
    mweb.clearCache(true);
    mweb.clearHistory();
    mweb.loadUrl("http://stackoverflow.com/");
}
else if (pos == 1) {
    mweb.clearCache(true);
    mweb.clearHistory();
    mweb.loadUrl("http://android.stackexchange.com/");
}

Оба clearCache() и clearHistory() у меня не работает.

Ответы [ 6 ]

45 голосов
/ 20 января 2012

используйте mweb.clearView(); перед загрузкой нового URL.

Edit:

clearView () устарела на уровне API 18. Используйте WebView.loadUrl("about:blank"), чтобы надежно сбросить состояние просмотра и освободить ресурсы страницы (включая любой работающий JavaScript).

чтобы решить проблему, поднятую @Liang:

Чтобы иметь последовательную обратную навигацию, вы можете переопределить «onPageFinished», и внутри него проверить, содержит ли URL «about: blank» или нет. если да, используйте "webview.goBack ()"

2 голосов
/ 16 февраля 2018

Я думаю, вы можете использовать Webview.clearHistory().Но помните, что бессильно вызывать это после загрузки WebView.Например, код:

webView.loadData(someUrl);
webView.clearHistory();

не будет работать, потому что webView не загружен.Мы должны очистить его как:

webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                clearHistory();
            }
}
2 голосов
/ 06 августа 2015

Я обычно скрываю веб-просмотр перед загрузкой нового URL, а затем показываю его снова, когда прогресс загрузки немного улучшился.

// url loading
mWebView.setVisibility(View.INVISIBLE);
mWebView.loadUrl(newUrl);

// show webview again
mWebView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int progress) {
        if (progress >= 10) {
            mWebView.setVisibility(View.VISIBLE);
        }
    }
}
1 голос
/ 22 августа 2014

Thnx to StefanK комментарий найден Здесь , Вам нужно использовать метод clearHistory() сразу после завершения загрузки страницы в методе WebViewClient onPageFinished(WebView view, String url) также в методе onLoadResource(WebView view, String url); следующим образом:

    myCoolWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url){
            view.loadUrl(url);
            return true;
        }
        @Override
        public void onLoadResource(WebView view, String url) {
            // Notice Here.
            view.clearHistory();
            super.onLoadResource(view, url);
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            // And Here.
            view.clearHistory();
            super.onPageFinished(view,url);
        }
    });

Также вы можете проверить canGoBack() и copyBackForwardList() на манипуляции.

0 голосов
/ 10 июля 2019

Похоже, что тип слоя веб-просмотра установлен, так как «программное обеспечение» может решить проблему. Возможно, предыдущее содержимое вызвано кешем рисования.

0 голосов
/ 25 февраля 2013

используйте следующую инструкцию перед loadData [Kuldip Bairagi]

view.loadUrl ( "JavaScript: document.open (); document.close ();");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...