前言:回头理理旧项目,偶然发现的老坑.
现象:不同的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打印的日志:
从log可以看出,WebView每次加载新的URL时,明显都会加载两次,且第二次加载的URL都是WebView一开始加载的URL,而第一次加载的就是新的URL,所以导致每次加载后看到的都是同样的页面。
原因:由于代码中settings.setUserAgentString方法在loadUrl方法之后调用的关系,为什么呢?看下面源码截图
源码:
翻译:设置WebVIEW的用户代理字符串。如果字符串为空或空,系统默认值将被使用。
请注意,从SDK19(Android5.0)版本开始,在加载网页时更改用户代理会导致WebVIEW再次启动加载。
解决:在loadUrl方法之前设置UserAgent。