關(guān)于shouldOverrideUrlLoading方法的一些考證

前言

這周在做一個(gè)需求時(shí),需要用到WebView砾层,但是在做的過程中,卻遇到了一些問題拴泌。WebView我其實(shí)接觸并不多魏身,這次的需求里還涉及了一些JS交互之類的,所以我是邊學(xué)邊做蚪腐,但是網(wǎng)上的示例和教程箭昵,往往藏著一些坑,這一次我就發(fā)現(xiàn)關(guān)于shouldOverrideUrlLoading這個(gè)方法回季,網(wǎng)上的說法真的是五花八門宙枷,這篇文章,我們來澄清一下shouldOverrideUrlLoading的真正用法茧跋。

正文

  1. 關(guān)于shouldOverrideUrlLoading用法的誤解慰丛,主要還是集中在返回值上。
  • 錯(cuò)誤說法1:返回true就調(diào)用系統(tǒng)瀏覽器瘾杭,返回false由WebView處理诅病。
  • 錯(cuò)誤說法2:返回true當(dāng)前url即使是重定向url也不會(huì)再執(zhí)行,返回false由系統(tǒng)執(zhí)行url粥烁,直到不再執(zhí)行此方法贤笆。
  • 錯(cuò)誤說法3:WebView上的所有加載都經(jīng)過這個(gè)方法。
  • 錯(cuò)誤說法4:這是一種廣為流傳的用法讨阻,在shouldOverrideUrlLoading中
@Override
       public boolean shouldOverrideUrlLoading(WebView view, String url) {
       view.loadUrl(url);
       return true;
       }

便可以在WebView中加載該url芥永。

  1. 那么我們來看看官方文檔是怎么說的:
  /**
     * Give the host application a chance to take over the control when a new
     * url is about to be loaded in the current WebView. If WebViewClient is not
     * provided, by default WebView will ask Activity Manager to choose the
     * proper handler for the url. If WebViewClient is provided, return true
     * means the host application handles the url, while return false means the
     * current WebView handles the url.
     * This method is not called for requests using the POST "method".
     *
     * @param view The WebView that is initiating the callback.
     * @param url The url to be loaded.
     * @return True if the host application wants to leave the current WebView
     *         and handle the url itself, otherwise return false.
     * @deprecated Use {@link #shouldOverrideUrlLoading(WebView, WebResourceRequest)
     *             shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead.
     */

大致翻譯一下:

  • 若沒有設(shè)置 WebViewClient 則由系統(tǒng)(Activity Manager)處理該 url,通常是使用瀏覽器打開或彈出瀏覽器選擇對話框钝吮。
  • 若設(shè)置 WebViewClient 且該方法返回 true 埋涧,則說明由應(yīng)用的代碼處理該 url,WebView 不處理奇瘦,也就是程序員自己做處理棘催。
  • 若設(shè)置 WebViewClient 且該方法返回 false,則說明由 WebView 處理該 url耳标,即用 WebView 加載該 url醇坝。
  1. 所以上面的說法1和說法2都是錯(cuò)誤的。對于說法4次坡,直接返回false即可達(dá)到同樣的效果呼猪。
    至于說法3,我在斷點(diǎn)調(diào)試的時(shí)候就已經(jīng)發(fā)現(xiàn)不對了砸琅,并不會(huì)每次加載都走shouldOverrideUrlLoading宋距,但是文檔里并沒有說shouldOverrideUrlLoading真正的調(diào)用時(shí)機(jī)是什么,所以我繼續(xù)在網(wǎng)上查找明棍,終于找到一篇源碼分析乡革,得出結(jié)論:
    WebView的前進(jìn)、后退、刷新沸版、以及post請求都不會(huì)調(diào)用shouldOverrideUrlLoading方法嘁傀,除去以上行為,還得滿足( ! isLoadUrl || isRedirect) 即 (不是通過webView.loadUrl來加載的 或者 是重定向) 這個(gè)條件视粮,才會(huì)調(diào)用shouldOverrideUrlLoading方法细办。

結(jié)語

通過這件事,讓我在網(wǎng)上查找資料的時(shí)候更加謹(jǐn)慎了蕾殴,因?yàn)橐呀?jīng)不是第一次出現(xiàn)這種情況了笑撞。廣為流傳的錯(cuò)誤答案,千篇一律的復(fù)制粘貼钓觉。這對于初學(xué)者來說茴肥,往往會(huì)造成嚴(yán)重的誤導(dǎo)和困惑。所以我們在寫東西的時(shí)候荡灾,也要更加慎重瓤狐,不要把自己都沒弄清楚的東西,當(dāng)成結(jié)論發(fā)表出來批幌,更不要不加思考的去復(fù)制粘貼別人的東西础锐。理所應(yīng)當(dāng)?shù)模疚闹械慕Y(jié)論荧缘,都是筆者在網(wǎng)上查資料皆警,并且結(jié)合官方文檔和源碼,然后自己寫程序驗(yàn)證過的截粗,目的是為了讓更多的初學(xué)者不被誤導(dǎo)信姓。當(dāng)然了,人無完人桐愉,如果文中出現(xiàn)有誤的地方财破,也歡迎大家指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末从诲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子靡羡,更是在濱河造成了極大的恐慌系洛,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件略步,死亡現(xiàn)場離奇詭異描扯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)趟薄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門绽诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事恩够∽渎洌” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵蜂桶,是天一觀的道長儡毕。 經(jīng)常有香客問我,道長扑媚,這世上最難降的妖魔是什么腰湾? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮疆股,結(jié)果婚禮上费坊,老公的妹妹穿的比我還像新娘。我一直安慰自己旬痹,他們只是感情好附井,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著唱凯,像睡著了一般羡忘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上磕昼,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天卷雕,我揣著相機(jī)與錄音,去河邊找鬼票从。 笑死漫雕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峰鄙。 我是一名探鬼主播浸间,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吟榴!你這毒婦竟也來了魁蒜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤吩翻,失蹤者是張志新(化名)和其女友劉穎兜看,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狭瞎,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡细移,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熊锭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弧轧。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雪侥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出精绎,到底是詐尸還是另有隱情速缨,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布捺典,位于F島的核電站鸟廓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏襟己。R本人自食惡果不足惜引谜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望擎浴。 院中可真熱鬧员咽,春花似錦、人聲如沸贮预。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仿吞。三九已至滑频,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唤冈,已是汗流浹背峡迷。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留你虹,地道東北人绘搞。 一個(gè)月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像傅物,于是被迫代替她去往敵國和親夯辖。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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

  • 最基礎(chǔ)的使用方法 最簡單的布局: 在Activity中使用WebView: 但只是這樣的話董饰,在模擬器上是會(huì)直接調(diào)到...
    HolenZhou閱讀 7,799評論 12 33
  • 在上一篇中我們說了WebView的基本使用安卓開發(fā)之WebView的使用(1)蒿褂,里面提到了WebViewClien...
    Reathin閱讀 2,700評論 0 14
  • WebView·開車指南 2016-08-31BugDev 北京市東城區(qū)首席Bug布道師開山之作,一整月交通事故血...
    53c021c38a1d閱讀 829評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理卒暂,服務(wù)發(fā)現(xiàn)贮缅,斷路器,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程介却,因...
    小菜c閱讀 6,404評論 0 17