Подтвердить что ты не робот

Как очистить предыдущий контент WebView перед загрузкой следующего WebView?

Мой сценарий первоначально загружается 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() не работают для меня.

4b9b3361

Ответ 1

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

Edit:

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

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

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

Ответ 2

Я обычно скрываю webview перед загрузкой нового 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);
        }
    }
}

Ответ 3

Я думаю, вы можете использовать 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();
            }
}

Ответ 4

Thnx в найденный комментарий 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() на манипуляции.

Ответ 5

Кажется, установить тип слоя webview, так как "программное обеспечение" может решить проблему. Возможно, предыдущее содержимое вызвано кешем рисования.

Ответ 6

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

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