一、初始化
1.加载
//方式1. 加载一个网页:
webView.loadUrl("http://www.google.com/");
//方式2:加载apk包中的html页面
webView.loadUrl("file:///android_asset/test.html");
//方式3:加载手机本地的html页面
webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");
//方式4:加载某一段代码
val body = "示例:这里有个img标签,地址是相对路径[外链图片转存失败(img-8vlE8Da6-1562229182334)(https://mp.csdn.net/uploads/allimg/130923/1FP02V7-0.png)]";
//baseUrl表示基础的网页,data表示要加载的内容,mimeType表示加载网页的类型
//encoding表示编码格式,historyUrl表示可用历史记录
webView.loadDataWithBaseURL("http://www.jcodecraeer.com", body, "text/html", "utf-8",null);
防止域控制不严格漏洞
settings.setAllowFileAccessFromFileURLs(false);
settings.setAllowUniversalAccessFromFileURLs(false);
2.暂停
override fun onPause() {
//通知内核尝试停止所有处理,如动画和地理位置,但是不能停止Js
webView.onPause()
//全应用程序的webView都会被暂停,降低CPU功耗
webView.pauseTimers()
//若加载的 html 里有JS 在执行动画等操作,需要关闭Javascript支持
settings.setJavaScriptEnabled(false)
super.onPause()
}
override fun onResume() {
//重新激活WebView
webView.onResume()
//恢复pauseTimers状态
webView.resumeTimers()
//若加载的 html 里有JS 在执行动画等操作,重新进入开启Javascript支持
// 禁止 file 协议加载 JavaScript
if (url.startsWith("file://")){
settings.setJavaScriptEnabled(false)
}else{
settings.setJavaScriptEnabled(true)
}
super.onResume()
}
3.关闭
在关闭Activity时,如果WebView的音乐或视频,还在播放,就必须销毁Webview
override fun onDestroy() {
super.onDestroy()
//从当前父容器移除WebView,防止其持有Activity的引用
constraintLayout.removeView(webView)
//销毁WebView
webView.destroy();
}
4.导航
用户点击back键会有两种情况,有前一页的页面,那么就后退,否则退出程序
override fun onBackPressed() {
//是否可以后退一页,是则后退,否则退出程序
if (webView.canGoBack()){
webView.goBack()
}else{
finish()
}
}
前进一页也要先判断是否有前一页
if (webView.canGoForward()){
webView.goForward()
}
5.设置缓存
val settings = webView.getSettings()
if (OKHttpUtil.INSTANCE.isNetworkConnected()) {
// 默认根据cache-control决定是否从网络上取数据
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
} else {
// 没网,离线加载,优先加载缓存(即使已经过期)
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
根据需要可以清除缓存
//清除整个应用程序的缓存,传入true表示同时内存与磁盘,false表示仅清除内存
webView.clearCac