为什么用WebView:
1.兼容已有的项目
2.可以动态更新
WebView webView;//通过findViewById找到
webView.loadUrl("网址");
但是loadUrl默认会通过手机浏览器打开,所以应该做下列修改:
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
titleView.setText(title);//textview显示title
super.onReceivedTitle(view, title);
}
});
webView.setWebViewClient(new WebViewClient(){
//重写urlLoading,这时设置在webView中显示
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
});
自定义webView的title:
界面刷新:webView.reload();
webView下载文件(2种方式):
1.自定义下载
webView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
//自定义HttpThread类,继承自Thread,然后在那里面实现下载逻辑
new HttpThread().start();
}
});
2.通过系统方式执行一个下载命令:
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
webView错误码处理:
1.本地自己定义组件
2.加载本地写好的html文件:重写WebViewClient中的onReceivedError方法,加载本地html文件:
webView.loadUrl("file:///android_asset/error.html");
webView同步Cookie问题:
参考http://blog.csdn.net/xiaozhiwz/article/details/46459555
webView与JS调用混淆问题:代码进行混淆后,不能响应相应的方法,那么解决办法是对相应的类或方法不进行混淆。
webView导致的远程注入问题:
解决办法:减少JS的调用,把所有JS与webView的调用都通过自定义协议的方式去解决。