前言:回頭理理舊項目,偶然發現的老坑.
現象:不同的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列印的日志:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX4lkeNNTVq50MjpXTyx2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM2kTM1cDM5ATNyUDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
從log可以看出,WebView每次加載新的URL時,明顯都會加載兩次,且第二次加載的URL都是WebView一開始加載的URL,而第一次加載的就是新的URL,是以導緻每次加載後看到的都是同樣的頁面。
原因:由于代碼中settings.setUserAgentString方法在loadUrl方法之後調用的關系,為什麼呢?看下面源碼截圖
源碼:
翻譯:設定WebVIEW的使用者代理字元串。如果字元串為空或空,系統預設值将被使用。
請注意,從SDK19(Android5.0)版本開始,在加載網頁時更改使用者代理會導緻WebVIEW再次啟動加載。
解決:在loadUrl方法之前設定UserAgent。