Android WebView 的相关设置
settings相关设置
webView.settings.apply {
//开启js
javaScriptEnabled = true
//弹出框的设置
//1.NARROW_COLUMNS:可能的话使所有列的宽度不超过屏幕宽度
//2.NORMAL:正常显示不做任何渲染
//3.SINGLE_COLUMN:把所有内容放大webview等宽的一列中
layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNS
//它会使用网页元标记中定义的属性加载WebView。因此它按照html中的定义缩放网页。
useWideViewPort = true
/************ 缓存模式 **********/
//保存密码
savePassword = true
//保存表单数据
saveFormData = true
//开启数据库
databaseEnabled = true
//设置DOM Storage缓存
domStorageEnabled = true
//关闭webView中缓存
cacheMode = WebSettings.LOAD_NO_CACHE
//设置缓存路径
setAppCachePath(cacheDir.absolutePath)
/************ 页面自动适配 **********/
//步骤1.隐藏webview缩放按钮
displayZoomControls = true
//步骤2 设置页面布局
//1)方式一,控制页面布局,有一定缺陷可能导致页面显示温度,不推荐
layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN
//2)方式二,自动根据手机分辨率缩放,推荐
useWideViewPort = true
loadWithOverviewMode = true
/************ 页面缩放支持 **********/
//仅支持双击缩放,不支持触摸缩放(android4.0)
setSupportZoom(true)
//设置支持缩放,设置了此属性,setSupportZoom(true);也默认设置为true
builtInZoomControls = true
/************ 图片加载 **********/
//默认为false,true表示阻塞图片请求
blockNetworkImage = true
//支持自动加载图片
loadsImagesAutomatically = true
/************ 字体相关 **********/
//设置WebView标准字体库字体,默认字体“sans-serif”。
standardFontFamily = ""
//设置WebView字体最小值,默认值8,取值1到72
minimumFontSize = 8
//设定编码格式
defaultTextEncodingName = "UTF-8"
//设置在WebView内部是否允许访问文件
allowFileAccess = true
//设置WebView中加载页面字体变焦百分比,默认100,整型数。
textZoom = 100
/************ 插件相关 **********/
//支持插件
pluginState = WebSettings.PluginState.ON
setRenderPriority(WebSettings.RenderPriority.HIGH)
//多窗口
supportMultipleWindows()
//当webview调用requestFocus时为webview设置节点 webview
setNeedInitialFocus(true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//设置Web调试
WebView.setWebContentsDebuggingEnabled(true)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//解决加载Https和Http混合模式网页加载问题
mixedContentMode = WebSettings.LOAD_NORMAL
}
}
//追加自定义标识符,一定要+=
userAgentString += "/native_$packageName"
}
WebClient相关设置
//webView相关事件触发,就会通过webViewClient 中的方法回调通知
webView.webViewClient = object: WebViewClient(){
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
Log.i("webViewClient" , "页面开始加载")
}
override fun onPageFinished(view: WebView?, url: String?) {
super.onPageFinished(view, url)
Log.i("webViewClient" , "页面加载完成回调")
}
override fun onLoadResource(view: WebView?, url: String?) {
super.onLoadResource(view, url)
Log.i("webViewClient" , "加载Url资源回调")
}
override fun onReceivedError(
view: WebView?,
request: WebResourceRequest?,
error: WebResourceError?
) {
super.onReceivedError(view, request, error)
Log.i("webViewClient" , "访问地址错误回调")
}
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
super.onReceivedSslError(view, handler, error)
Log.i("webViewClient" , "加载SSl错误回调")
}
}
webChromeClient 相关设置
//当影响浏览器的事件到来时,就会通过WebChromeClient中的方法回调通知用法。
webView.webChromeClient = object : WebChromeClient(){
override fun onJsAlert(
view: WebView?,
url: String?,
message: String?,
result: JsResult?
): Boolean {
Log.i("webChromeClient" , "当网页调用alert()来弹出alert弹出框前回调,用以拦截alert()函数")
return super.onJsAlert(view, url, message, result)
}
override fun onJsConfirm(
view: WebView?,
url: String?,
message: String?,
result: JsResult?
): Boolean {
Log.i("webChromeClient" , "当网页调用confirm()来弹出confirm弹出框前回调,用以拦截confirm()函数")
return super.onJsConfirm(view, url, message, result)
}
override fun onJsPrompt(
view: WebView?,
url: String?,
message: String?,
defaultValue: String?,
result: JsPromptResult?
): Boolean {
Log.i("webChromeClient" , "当网页调用prompt()来弹出prompt弹出框前回调,用以拦截prompt()函数")
return super.onJsPrompt(view, url, message, defaultValue, result)
}
override fun onReceivedTitle(view: WebView?, title: String?) {
Log.i("webChromeClient" , "网页的title回调")
super.onReceivedTitle(view, title)
}
override fun onReceivedIcon(view: WebView?, icon: Bitmap?) {
Log.i("webChromeClient" , "网页的icon回调")
super.onReceivedIcon(view, icon)
}
override fun onShowFileChooser(
webView: WebView?,
filePathCallback: ValueCallback<Array<Uri>>?,
fileChooserParams: FileChooserParams?
): Boolean {
Log.i("webChromeClient" , "文件选择回调")
return super.onShowFileChooser(webView, filePathCallback, fileChooserParams)
}
override fun onConsoleMessage(consoleMessage: ConsoleMessage?): Boolean {
Log.i("webChromeClient" , "打印 console 信息")
return super.onConsoleMessage(consoleMessage)
}
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
Log.i("webChromeClient" , "通知程序当前页面加载进度")
}
}