webview跳轉頁面的返回操作不成功,死迴圈問題
阿新 • • 發佈:2019-01-23
專案中需要用webView載入第三方的web頁面,其中有個頁面有重定向到另外一個頁面,造成了頁面無法後退,後退到上個頁面,又重定向到之前介面,重定向源頁面也被加入到瀏覽記錄中,剛開始想查詢api中找個編輯歷史記錄的方法,把找重定向源頁面從歷史記錄中刪除,半天找不到,只有clearHistory方法。
後用瀏覽器訪問該網站,則後退正常,會退到重定向頁面。用微信內建WebView ,QQ內建WebView開啟該頁面後退也正常,發現重定向源頁面也被加入到瀏覽記錄中。
糾結這個問題困擾了兩三天,各大網站找解決方案也找不到一個完美的方法,大部分都是新建集合另外記錄下瀏覽記錄,後退時載入集合裡的記錄的頁面。而不使用Webview.goBack(),在stackOverflow上找也大都是這些。感覺這些方法不完美,沒有從根本上解決問題。總感覺還有更好的方法,一個偶然情況下發現瞭解決方案。
在使用WebView的時候,我們一般都會設定WebViewClient ,重寫shouldOverrideUrlLoading方法,讓webView載入點選url,並return true。因為不這樣設定,點選頁面上的連結彈出瀏覽器
- webView.setWebViewClient(new WebViewClient() {
- @Override
- publicboolean shouldOverrideUrlLoading(WebView view, String url) {
- view.loadUrl(url);
-
return
- }
- });
而造成重定向源頁面被加入歷史記錄貌似恰恰是這個設定。而讓人想不到的解決方案竟是下面這段程式碼
- webView.setWebViewClient(new WebViewClient() {
- @Override
- publicboolean shouldOverrideUrlLoading(WebView view, String url) {
- returnfalse;
- }
- });
之前我以為這樣設定跟沒設定WebViewClient效果一樣,也會點連線彈瀏覽器。沒想到竟是完全不一樣的,這樣設定點連線會在當前webView開啟,而且重定向頁面後退也沒問題