1. 程式人生 > >webview跳轉頁面的返回操作不成功,死迴圈問題

webview跳轉頁面的返回操作不成功,死迴圈問題

專案中需要用webView載入第三方的web頁面,其中有個頁面有重定向到另外一個頁面,造成了頁面無法後退,後退到上個頁面,又重定向到之前介面,重定向源頁面也被加入到瀏覽記錄中,剛開始想查詢api中找個編輯歷史記錄的方法,把找重定向源頁面從歷史記錄中刪除,半天找不到,只有clearHistory方法。

後用瀏覽器訪問該網站,則後退正常,會退到重定向頁面。用微信內建WebView ,QQ內建WebView開啟該頁面後退也正常,發現重定向源頁面也被加入到瀏覽記錄中。

糾結這個問題困擾了兩三天,各大網站找解決方案也找不到一個完美的方法,大部分都是新建集合另外記錄下瀏覽記錄,後退時載入集合裡的記錄的頁面。而不使用Webview.goBack(),在stackOverflow上找也大都是這些。感覺這些方法不完美,沒有從根本上解決問題。總感覺還有更好的方法,一個偶然情況下發現瞭解決方案。

在使用WebView的時候,我們一般都會設定WebViewClient ,重寫shouldOverrideUrlLoading方法,讓webView載入點選url,並return true。因為不這樣設定,點選頁面上的連結彈出瀏覽器

  1. webView.setWebViewClient(new WebViewClient() {  
  2.     @Override
  3.     publicboolean shouldOverrideUrlLoading(WebView view, String url) {  
  4.          view.loadUrl(url);  
  5.         return
    true;  
  6.     }  
  7. });  


而造成重定向源頁面被加入歷史記錄貌似恰恰是這個設定。而讓人想不到的解決方案竟是下面這段程式碼

  1. webView.setWebViewClient(new WebViewClient() {  
  2.         @Override
  3.         publicboolean shouldOverrideUrlLoading(WebView view, String url) {  
  4.             returnfalse;  
  5.         }  
  6.     });  

之前我以為這樣設定跟沒設定WebViewClient效果一樣,也會點連線彈瀏覽器。沒想到竟是完全不一樣的,這樣設定點連線會在當前webView開啟,而且重定向頁面後退也沒問題