混合开发之原生WebView高级用法
1.用户点击webview中网页中的超链接使用其他浏览器来打开超链接是比较安全的。
2.当我们使用的WebView中有Javascript,而恶意网页中如果有和JavaScript连接的程序代码,那这个恶意的网页就能操作我们的应用程序了,是不安全的。为避免这种情况的发生我们使用WebClient对象借助程序代码控制来打开特点的网页而不是启动其他的网页浏览器
参见百度百科:https://jingyan.baidu.com/album/ea24bc39f29684da63b33167.html?picindex=1
用到下面几个方法来进行网页控制(webView控件中常用的几个方法)
- goBack() 用于回到前一个浏览的网页。和canGoBack()检查是否有前一个网页存在,如果不存在前一个网页直接调用 getUrl()去的对应的网址打开。
- goForwad()回到下一个浏览的网页。与goBack()相对应。也是和canGoBack()与getUrl()方法结合使用
- stopLoading()用于停止正在下载的网页
- reload()重新下载网页相当于刷新
- setSupportZoom()和setBuiltlnZoomControls() 设置Webview的网页缩放功能,调用这两个方法并传入true
3.WebView中进行网页下载控制的涉及到WebViewClient和WebChromeClient两个对象,WebView用他们下载网页数据然后在使用callback通知主程序运行结果
- webView.setWebViewClient(new WebViewClient());----------但一般不这样使用,会用一个新类去继承这个对象使用,需要重写四个方法
1 public class MyWebViewClient extends WebViewClient { 2 //1.单击WebView网页中的超链接时使用 3 @Override 4 public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { 5 return super.shouldOverrideUrlLoading(view, request); 6 } 7 8 //2.开始下载网页时使用 9 @Override 10 public void onPageStarted(WebView view, String url, Bitmap favicon) { 11 super.onPageStarted(view, url, favicon); 12 } 13 //3.完成网页下载时使用 14 @Override 15 public void onPageFinished(WebView view, String url) { 16 super.onPageFinished(view, url); 17 } 18 //4.当下载网页出错时使用 19 @Override 20 public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 21 super.onReceivedError(view, request, error); 22 } 23 24 //5.这个是我自己定义的方法,用来设置运行时用到的对象 25 public MyWebViewClient setupViewCompnent(Activity act, WebView webView, Button btnGoBack, 26 Button btnGoForward, Button btnReload,Button btnStop){ 27 return this; 28 } 29 }
- WebChromeClient对象也是和网页下载有关,我们利用他获得网页下载的进度,只需要用到它的onProgressChang()方法-------在主程序中直接使用即可
1 private void initView() { 2 webView.setWebChromeClient(new WebChromeClient(){ 3 @Override 4 public void onProgressChanged(WebView view, int newProgress) { 5 super.onProgressChanged(view, newProgress); 6 //activity和webView的进度值使用不同的数值范围,因此需要乘上100,当达到100%进度后会自动消失 7 setProgress(newProgress*100); 8 } 9 }); 10 }