webView 的使用
1.可以通过Intent来调用浏览器打开链接(调用外部应用)
2.可以通过webView来打开链接(当前应用)
当用户点击一个WebVeiw中的页面的链接时,通常默认会通过浏览器来加载点击的URL,如果我们想要默认由WebView来加载此URL
我们必须实现修改这种默认设置,我们可以通过实现WebViewClient类并复写其shouldOverrideUrlLoading方法来改变这种默认设置。从而实现,默认
由webView来打开URL.
WebViewClient类的作用:帮助WebView去处理一些页面控制和请求通知
启动支持Javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
后退与前进
WebView会自动生成历史访问记录,我们可以通过goBack()或者goForward()来实现向前或者向后访问已经访问过的站点。
判断页面的加载过程,制作自定义的进度条,提升用户体验
我们需要实现重写WebChromeClient的
public void onProgressChanged(WebView view, int newProgress) {}
方法。
newProgress=100 表示加载完成
newProgress<100 表示正在加载
缓存模式(5种)
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网
络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是
有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。
总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。
webView下载
1.调用系统的下载
2.自己实现下载
webview错误码的处理
然后我们就可以在这个回调方法中来进行错误处理
1.加载一个html页面
2.直接通过我们的Android来显示
webView如何同步Cookie
webView与javascript调用混淆问题
让js调用的类和方法不被混淆
webView导致远程注入的问题
1.可以通过Intent来调用浏览器打开链接(调用外部应用)
Uri uri = Uri.parse(urlText.getText().toString());
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
2.可以通过webView来打开链接(当前应用)
当用户点击一个WebVeiw中的页面的链接时,通常默认会通过浏览器来加载点击的URL,如果我们想要默认由WebView来加载此URL
我们必须实现修改这种默认设置,我们可以通过实现WebViewClient类并复写其shouldOverrideUrlLoading方法来改变这种默认设置。从而实现,默认
由webView来打开URL.
WebViewClient类的作用:帮助WebView去处理一些页面控制和请求通知
启动支持Javascript
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
后退与前进
WebView会自动生成历史访问记录,我们可以通过goBack()或者goForward()来实现向前或者向后访问已经访问过的站点。
在后退的过程中当退到第一个界面时,有可能会按后退键不退出的情况,这是由于由于页面的重定向导致等原因导致的,解决办法:
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { editText.setText(url); //view.loadUrl(url); return false; } });
判断页面的加载过程,制作自定义的进度条,提升用户体验
我们需要实现重写WebChromeClient的
public void onProgressChanged(WebView view, int newProgress) {}
方法。
newProgress=100 表示加载完成
newProgress<100 表示正在加载
webView.setWebChromeClient(new WebChromeClient() { @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if (newProgress < 100) { pb.setVisibility(View.VISIBLE); } else { pb.setVisibility(View.GONE); } } });
WebView缓存的运用
mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);缓存模式(5种)
LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
如:www.taobao.com的cache-control为no-cache,在模式LOAD_DEFAULT下,无论如何都会从网
络上取数据,如果没有网络,就会出现错误页面;在LOAD_CACHE_ELSE_NETWORK模式下,无论是
有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。
www.360.com.cn的cache-control为max-age=60,在两种模式下都使用本地缓存数据。
总结:根据以上两种模式,建议缓存策略为,判断是否有网络,有的话,使用LOAD_DEFAULT,无网络时,使用LOAD_CACHE_ELSE_NETWORK。
webView下载
1.调用系统的下载
2.自己实现下载
webview错误码的处理
WebViewClient的onReceivedError方法会给我们返回相应的错误码
@Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); }
然后我们就可以在这个回调方法中来进行错误处理
1.加载一个html页面
2.直接通过我们的Android来显示
webView如何同步Cookie
webView与javascript调用混淆问题
让js调用的类和方法不被混淆
webView导致远程注入的问题
webView自定义协议
600

被折叠的 条评论
为什么被折叠?



