2012-01-20 2 views
18

Мой сценарий изначально я загружаю WebView, а позже я загружаю тот же WebView с другим URL-адресом.Как удалить предыдущий контент WebView перед загрузкой следующего WebView?

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

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

Say,

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() не работает для меня.

ответ

39

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

Edit:

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

решить вопрос, поднятый @Liang:

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

+6

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

+9

'WebView.loadUrl (« about: blank »)' добавит пустую страницу в 'BackForwardList', поэтому она вернется к пустой странице, если используется' WebView.goBack() '. Можно ли удалить пустую страницу в 'BackForwardList'? – Liang

+0

Кто-нибудь найдет быстрое решение проблемы @Liang? about: blank works за исключением того, что добавляет пустую страницу в предысторию. – loeschg

-4

использовать следующее заявление перед тем LoadData [Kuldip Bairagi]

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

1

Thnx на StefanK комментарий найдено Here, Вы должны использовать право clearHistory() метод, когда страница загрузится в методе WebViewClientonPageFinished(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() для манипуляций.

1

Обычно я скрыть веб-просмотр перед загрузкой нового 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); 
     } 
    } 
} 
+0

Это на самом деле довольно приятный подход. не проверял его, но приятно видеть другой подход, чем loadData («about: blank») имеет +1 – cjurjiu

0

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