Android 解決WebView重定向問(wèn)題

在Android開(kāi)發(fā)過(guò)程中,使用過(guò)WebView的童鞋可能難免會(huì)遇到URL重定向問(wèn)題拗小。

簡(jiǎn)單敘述下這種問(wèn)題的情況银还,就是WebView首先加載A鏈接,然后在WebView上點(diǎn)擊一個(gè)B鏈接進(jìn)行加載腐碱,B鏈接會(huì)自動(dòng)跳轉(zhuǎn)到C鏈接誊垢,這個(gè)時(shí)候調(diào)用WebView的goback方法掉弛,會(huì)返回到加載B鏈接,但是B鏈接又會(huì)跳轉(zhuǎn)到C鏈接喂走,從而導(dǎo)致沒(méi)法返回到A鏈接界面(當(dāng)然也有朋友說(shuō)快速的按兩次返回鍵-也就是連續(xù)觸發(fā)了兩次goback可以返回到A鏈接殃饿,但并不是所有用戶都懂這個(gè),而且操作上也很惡心芋肠。)乎芳,這就是重定向問(wèn)題。

這個(gè)問(wèn)題由來(lái)已久帖池,網(wǎng)上解決辦法也有好幾種奈惑,但是都沒(méi)有什么很好的統(tǒng)一的解決方式,QQ微信之類的內(nèi)置瀏覽器做的很好睡汹,不過(guò)不知道其實(shí)現(xiàn)方式肴甸。

以往的解決思路就是包括自己維護(hù)webview的url歷史棧,或者前后端勾兌好囚巴,或者依賴服務(wù)器之類的什么沒(méi)試過(guò)的xx方式原在,見(jiàn)鏈接:

http://blog.csdn.net/t12x3456/article/details/39134961

內(nèi)容就各位慢慢去體會(huì),也是一種思考的過(guò)程彤叉,其實(shí)這些解決辦法在以往也是非常有用的庶柿,其實(shí)這個(gè)解決辦法跟工程設(shè)置的編譯版本和最小版本有關(guān),大家都知道姆坚,在不同的版本上澳泵,程序有很多不同的效果和處理方式。今天我關(guān)注的不是在上面兼呵,而是接下來(lái)要說(shuō)的4.0以后的解決重定向的方法兔辅,非常簡(jiǎn)單(我是基于4.0做得測(cè)試,到底這個(gè)方法支持到什么版本击喂,我未研究)维苔。

webView.setWebViewClient(new WebViewClient() {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

return false;

}

});

一言不合就貼了代碼,對(duì)的懂昂,就是這么簡(jiǎn)單介时,就是直接返回false,就可以解決重定向問(wèn)題凌彬。

網(wǎng)上搜索了下這里返回false和返回true的原因沸柔,其實(shí)我也看的云里霧里,沒(méi)理解透徹

shouldOverrideUrlLoading :這個(gè)方法的返回值

return true 表示當(dāng)前url即使是重定向url也不會(huì)再執(zhí)行(除了在return true之前使用webview.loadUrl(url)除外铲敛,因?yàn)檫@個(gè)會(huì)重新加載)

return false? 表示由系統(tǒng)執(zhí)行url褐澎,直到不再執(zhí)行此方法,即加載完重定向的ur(即具體的url伐蒋,不再有重定向)工三。

先弄出來(lái)迁酸,大家可以交流,看看對(duì)不同的api的效果是什么樣子俭正。


附帶在一個(gè)論壇上看到一個(gè)網(wǎng)友的解釋奸鬓,我覺(jué)得也很有參考的價(jià)值,其實(shí)跟自己維護(hù)歷史棧道理相同掸读,不過(guò)它是通過(guò)httpcode來(lái)判斷是否是重定向地址串远,以下是他說(shuō)的:

來(lái)講講WebView加載重定向頁(yè)面會(huì)遇到問(wèn)題。

1.如果需要獲取webview訪問(wèn)的url地址寺枉,那么加載重定向頁(yè)面時(shí)會(huì)顯示兩次

2.如果WebView在加載頁(yè)面的過(guò)程中抑淫,有加載重定向頁(yè)面,那么在Android2.3版本中會(huì)遇到無(wú)法回退的問(wèn)題姥闪,但是4.0以上系統(tǒng)不會(huì)。例如砌烁,用戶在點(diǎn)擊回退時(shí)筐喳,webview會(huì)執(zhí)行g(shù)oBack()方法,2.3系統(tǒng)不能正澈恚回退避归,而4.0能正常回退管呵,可以解釋為4.0系統(tǒng)的webview對(duì)重定向做了處理梳毙,他會(huì)把重定向的兩個(gè)頁(yè)面看做是一個(gè)頁(yè)面,所以webview成功回退了捐下,但是2.3系統(tǒng)的webview會(huì)先回退到重定向頁(yè)面(非真正的目的頁(yè)面)账锹,回退之后會(huì)執(zhí)行l(wèi)oadUrl(url)方法,而這是因?yàn)閡rl是個(gè)重定向url坷襟,所以會(huì)跳轉(zhuǎn)到真正的目標(biāo)頁(yè)面奸柬,so,經(jīng)過(guò)兩次加載婴程,頁(yè)面還是回到goBack()之前的頁(yè)面廓奕!

問(wèn)題2的解決方案:

從重定向的概念可知,當(dāng)訪問(wèn)重定向url時(shí)服務(wù)器會(huì)返回301狀態(tài)碼档叔,那么可以根據(jù)此特殊的狀態(tài)碼來(lái)把重定向頁(yè)面排除在歷史訪問(wèn)記錄隊(duì)列里桌粉。

具體思路為:

(1)自定義一個(gè)歷史url訪問(wèn)隊(duì)列——MyWebBackForwardList

(2)在webview每次loadUrl(url)之前先用HttpUrlConnection對(duì)象的getResponseCode()方法來(lái)獲取狀態(tài)碼,如果==301衙四,不加入隊(duì)列中铃肯,否者加入。

(3)重寫webview的canGoBack()和goBack()方法

不再使用webview的WebBackForwardList對(duì)象來(lái)取歷史url届搁,而是使用自定義的MyWebBackForwardList來(lái)取出回退的url

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末缘薛,一起剝皮案震驚了整個(gè)濱河市窍育,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌宴胧,老刑警劉巖漱抓,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恕齐,居然都是意外死亡乞娄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門显歧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)仪或,“玉大人,你說(shuō)我怎么就攤上這事士骤》渡荆” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵拷肌,是天一觀的道長(zhǎng)到旦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)巨缘,這世上最難降的妖魔是什么添忘? 我笑而不...
    開(kāi)封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮若锁,結(jié)果婚禮上搁骑,老公的妹妹穿的比我還像新娘。我一直安慰自己又固,他們只是感情好仲器,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著口予,像睡著了一般娄周。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沪停,一...
    開(kāi)封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天煤辨,我揣著相機(jī)與錄音,去河邊找鬼木张。 笑死众辨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舷礼。 我是一名探鬼主播鹃彻,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼妻献!你這毒婦竟也來(lái)了蛛株?” 一聲冷哼從身側(cè)響起团赁,我...
    開(kāi)封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谨履,沒(méi)想到半個(gè)月后欢摄,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笋粟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年怀挠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片害捕。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绿淋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尝盼,到底是詐尸還是另有隱情吞滞,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布盾沫,位于F島的核電站冯吓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏疮跑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一凸舵、第九天 我趴在偏房一處隱蔽的房頂上張望祖娘。 院中可真熱鬧,春花似錦啊奄、人聲如沸渐苏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)琼富。三九已至,卻和暖如春庄新,著一層夾襖步出監(jiān)牢的瞬間鞠眉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工择诈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留械蹋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓羞芍,卻偏偏與公主長(zhǎng)得像哗戈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荷科,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容