赞
踩
正常的网络访问中直接按照url地址访问
String url=intent.getExtras().getString("url"); webView.getSettings().setJavaScriptEnabled(true); // webView.loadUrl("http://docs.google.com/gview?embedded=true&url="+url); webView.loadUrl(url); //覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开 webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url); return true; } });
- //打开本包内asset目录下的index.html文件
- wView.loadUrl(" file:///android_asset/index.html ");
//打开本地sd卡内的index.html文件
wView.loadUrl(" file:///sdcard/index.html ");
关于解析
webView.loadUrl("http://docs.google.com/gview?embedded=true&url="+url);
由于谷歌推出中国大陆市场,导致谷歌提供的在线解析接口无法使用
那么,是不是webview就无法做到在线展示doc等办公文件了呢,no
https://view.officeapps.live.com/op/view.aspx?src=http://618410.user-website9.com/003.docx
此接口由微软提供,作用和谷歌接口相识,可借用此接口来在线解析
那么此处存在隐藏问题,经此接口解析后,此url地址变成了https,那么我们作何处理呢
2访问https
在Android中,WebView是用来load http和https网页到本地应用的控件。在默认情况下,通过loadUrl(String url)方法,可以顺利load。但是,当load有ssl层的https页面时,如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像PC浏览器中那样跳出一个风险提示框。因此,我们必须针对这种情况进行处理。(这个证书限于2.1版本以上的Android 系统才可以)
webView.setWebViewClient(new WebViewClient() {
public void onReceivedSslError(WebView view,
SslErrorHandler handler, SslError error) {
// //handler.cancel(); 默认的处理方式,WebView变成空白页
handler.proceed(); // 接受证书
// handleMessage(Message msg); 其他处理
}
});
// 这两行代码一定加上否则效果不会出现 webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDefaultTextEncodingName("gb2312");
webView.loadUrl(<a target=_blank href="https://xxxxxxxx">https://xxxxxxxx</a>);
查看Android浏览器源码在TabControl.Java类中SubWindowClient方法中找,如果只是简单的接受所有证书的话,就直接调process()方法就行了
3有时候我们我们需要WebView能够实现超链接的功能。
我们可以调用setWebViewClient()方法试着WebView的客户端,
此时我们只要重写一下WebViewClient类下的
public boolean shouldOverrideKeyEvent (WebView view, KeyEvent event)就可以了
源代码如下:
private class myWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
webView.loadUrl(URL);
return true;
}
4考虑到网页的加载速度,我们可以调用setWebChromeClient()方法
我们此时只要重写一下WebChromeClient类中的
public void onProgressChanged (WebView view, int newProgress)来显示页面的加载进度,实例代码如下:
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
handler.sendEmptyMessage(CLOSE_DIA);
}
super.onProgressChanged(view, newProgress);
}
});
代码中用到了handlr, 此时如果加载进度=100的时候,发个消息给 handler 然后进行处理
5如果希望浏览的网页后退而不是退出浏览器,需要WebView覆盖URL加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站点。
//改写物理按键——返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK)
{
if(webView.canGoBack())
{
webView.goBack();//返回上一页面
return true;
}
else
{
System.exit(0);//退出程序 }
}
return super.onKeyDown(keyCode, event);
}
6缓存
优先使用缓存
webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
不使用缓存:
webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。