天天看點

不同的URL,WebView加載出相同的頁面

前言:回頭理理舊項目,偶然發現的老坑.

現象:不同的URL,webView加載出相同的頁面;

代碼:

僞代碼:
webView.loadUrl(openUrl);
initView();

public void initView(){
    webView.setWebViewClient(client);
    webView.setWebChromeClient(chromeClient);
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);

    //提供目前浏覽器類型及版本、作業系統及版本、浏覽器核心、等資訊的辨別
    String ua = settings.getUserAgentString();
    settings.setUserAgentString(ua+"; WYK /"+GlobalUtils
                .getAPPVersionName(Global.getContext()));
}
           

檢視log列印的日志:

不同的URL,WebView加載出相同的頁面

從log可以看出,WebView每次加載新的URL時,明顯都會加載兩次,且第二次加載的URL都是WebView一開始加載的URL,而第一次加載的就是新的URL,是以導緻每次加載後看到的都是同樣的頁面。

原因:由于代碼中settings.setUserAgentString方法在loadUrl方法之後調用的關系,為什麼呢?看下面源碼截圖

源碼:

不同的URL,WebView加載出相同的頁面

翻譯:設定WebVIEW的使用者代理字元串。如果字元串為空或空,系統預設值将被使用。

請注意,從SDK19(Android5.0)版本開始,在加載網頁時更改使用者代理會導緻WebVIEW再次啟動加載。

解決:在loadUrl方法之前設定UserAgent。

繼續閱讀