歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android webView 網址重定向影響goBack()

Android自帶的控件 webView的時候,訪問某網址, 網址會通過某些方式進行重定向, 這時會出現一個問題。

如下所示:

你想要在 『A網址』 中打開 『C網址』, 但實際上打開『C網址』的時候, 是需要通過 『B網址』來中轉的.

就出現了下面這種情況:

1
A網址 -> B網址(重定向到C) -> C網址

好,現在再來說一下我們在使用webView的時候一些習慣.

如果說我們不想讓用戶在webView中點擊連接後,讓用戶打開系統的浏覽器進行浏覽, 而是繼續使用我們的webView進行浏覽的話.

我們一般的操作是:

1
2
3
4
5
6
7
8
webView.setWebViewClient(new WebViewClient(){
        @Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // 控制新的連接在當前WebView中打開
            webView.loadUrl(url);
            return true;
        }
});

通過上面的方法,讓我們的浏覽器能夠繼續訪問網頁中的鏈接. 但是上面的方式,碰到需要後退的需求,就出現了問題.

我們假設這時候, 用戶需要從『C網址』返回到『A網址』, 用戶自己本身不知道中間有『B網址』, 的存在, 用戶只是希望能夠在我點擊goBack的時候, 能夠回到『A網址』

但是看上面結構式是: A網址 -> B網址(重定向到C) -> C網址.

這樣可以判斷出, 直接調用了 webView.goBack() 一定會返回到『B網址』, 但是『B網址』網址的功能又是重定向到『C網址』, 所以用戶看到一個現象就是, 不能goBack了, 每次點擊goBack, 就又回到『C網址』.

那上面這個問題怎麼解決呢?

通過修改,我們上面override的方法.

1
2
3
4
5
6
7
webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false; // doc上的注釋為: True if the host application wants to handle the key event itself, otherwise return false(如果程序需要處理,那就返回true,如果不處理,那就返回false)
            // 我們這個地方返回false, 並不處理它,把它交給webView自己處理.
        }
});

這樣就可以既實現在當前webView跳轉, 又能夠在goBack時准確返回了.

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved