1.問題描述
最近有很多人問我爲什麼webview加載一個網頁,執行了goback網頁不能返回的問題,我特此來爲那些有問題的或者說有遇到這個問題不知道怎麼下手解決的,可以看看下面的解答,或許會對你有所幫助吧。
2.問題原因
webview執行goback爲什麼不能返回上一頁面,而爲什麼有的網頁可以返回上一個頁面呢?這到底是什麼原因導致的這個問題呢?是因爲web頁面在被打開的時候是以url1打開,一部分網頁是執行了重定向,那麼它就會定向到另外一個url2地址上面去,導致你goback返回是返回了,當它從url3返回的時候其實並不是跳轉到url2,而是直接返回到url1,而跳轉到url1,又因爲url1是打開後直接進行重定向的,那麼就直接又跳轉到url2了,所以會一直循環執行。所以你退不出去。而另外一部分是可以退回上一個頁面是因爲這些頁面沒有重定向的操作。所以會直接退回到上一個面。
3.解決方案
既然我們知道了其中的原理,那麼看看找找webview有沒有什麼方法可以解決方案的。
其實,解決這個問題很簡單,webview的webViewClient這個玩意,這個玩意就不多說了,大家看看裏面的方法就知道幹什麼的了。這個屬性可以監聽網頁的剛開始打開的網頁,和跳轉後的網頁,這兩個方法分別是onPageStarred 和 shouldOverUrlLoading,這兩個方法可以解決大家的問題。怎麼去用。看看下面的代碼
webView.setWebViewClient(new WebViewClient() {
private String startUrl;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
loadingView.show();
startUrl = url;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(startUrl!=null && startUrl.equals(url))
{
view.loadUrl(url);
}
else
{
//交給系統處理
return super.shouldOverrideUrlLoading(view, url);
}
return true;
}
});
通過上面的代碼就可以解決大家的問題了。
4.聯繫本人
QQ:553873475 郵箱 [email protected]