這篇文章主要介紹如何解決WebView重定向行為導(dǎo)致多次加載的問(wèn)題,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
在永嘉等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),成都營(yíng)銷網(wǎng)站建設(shè),外貿(mào)營(yíng)銷網(wǎng)站建設(shè),永嘉網(wǎng)站建設(shè)費(fèi)用合理。
使用 WebView 時(shí),我們通常會(huì)重寫(xiě)以下方法:
shouldOverrideUrlLoading()
onPageStarted()
onPageFinished()
一、WebView 內(nèi)部點(diǎn)擊連接,他們的回調(diào)順序是這樣的:
1、如果是固定的地址:
shouldOverrideUrlLoading() -> onPageStarted()-> onPageFinished()
shouldOverrideUrlLoading()由于它要提供給APP選擇加載網(wǎng)頁(yè)環(huán)境的機(jī)會(huì),所以只要是網(wǎng)頁(yè)上地址請(qǐng)求,都會(huì)獲取到。
2、如果是重定向地址,在跳轉(zhuǎn)到目的地址之前會(huì)不斷重定向,每一次重定向都會(huì)回調(diào):
redirection: onPageStarted()->shouldOverrideUrlLoading()->onPageFinished()
那么一個(gè)正常的重定向地址,方法的執(zhí)行順序就是:
shouldOverrideUrlLoading()->redirection -> … ->redirection ->onPageStarted()->onPageFinished()
二、開(kāi)啟WebView 直接loadUrl(其實(shí)就是少了shouldOverrideUrlLoading()):
1、 如果是目的地址,那么方法的執(zhí)行順序是:
onPageStarted()-> onPageFinished()
loadUrl()加載地址時(shí),一般不會(huì)觸發(fā)shouldOverrideUrlLoading(),一旦觸發(fā)了,就說(shuō)明這是一個(gè)重定向地址。
2、 如果是重定向地址,方法的執(zhí)行順序就是:
redirection -> … -> redirection ->onPageStarted()->onPageFinished()
所以,如果我們想要自定義進(jìn)度條,就要考慮如何避免重定向行為導(dǎo)致的多次加載問(wèn)題:
設(shè)置一個(gè)Boolean全局變量flag,
在onPageStarted()中設(shè)置為true,若加載樣式?jīng)]有開(kāi)啟,就開(kāi)啟進(jìn)度條等加載樣式;
在onPageFinished()中檢測(cè),如果為true,就說(shuō)明已經(jīng)是目的地址,可以關(guān)閉加載樣式,如果是false,就不做處理,繼續(xù)等待;
在shouldOverrideUrlLoading()中,設(shè)置為false,若加載樣式?jīng)]有開(kāi)啟,就開(kāi)啟進(jìn)度條等加載樣式
這樣就可以很好的控制加載樣式和網(wǎng)址跳轉(zhuǎn)之間的關(guān)系了。
或參考:How to listen for a WebView finishing loading a URL?
補(bǔ)充知識(shí):webview多次調(diào)用onPageFinished問(wèn)題
項(xiàng)目中遇到了webview多次調(diào)用onPageFinished問(wèn)題,相關(guān)文章比較多,但是很多是無(wú)效的,甚至有些需要服務(wù)器修改。
直到谷歌到https://stackoverflow.com/questions/3149216/how-to-listen-for-a-webview-finishing-loading-a-url
才發(fā)現(xiàn)有用的方案
其中這個(gè)方法最終優(yōu)雅得解決了我的問(wèn)題
public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (m_webView.getProgress() == 100) { progressBar.setVisibility(View.GONE); m_webView.setVisibility(View.VISIBLE); } }
以上是“如何解決WebView重定向行為導(dǎo)致多次加載的問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!