Android WebView 的相关设置
settings相关设置
webView.settings.apply {//开启jsjavaScriptEnabled = 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 = trueloadWithOverviewMode = true/************ 页面缩放支持 **********///仅支持双击缩放,不支持触摸缩放(android4.0)setSupportZoom(true)//设置支持缩放,设置了此属性,setSupportZoom(true);也默认设置为truebuiltInZoomControls = true/************ 图片加载 **********///默认为false,true表示阻塞图片请求blockNetworkImage = true//支持自动加载图片loadsImagesAutomatically = true/************ 字体相关 **********///设置WebView标准字体库字体,默认字体“sans-serif”。standardFontFamily = ""//设置WebView字体最小值,默认值8,取值1到72minimumFontSize = 8//设定编码格式defaultTextEncodingName = "UTF-8"//设置在WebView内部是否允许访问文件allowFileAccess = true//设置WebView中加载页面字体变焦百分比,默认100,整型数。textZoom = 100/************ 插件相关 **********///支持插件pluginState = WebSettings.PluginState.ONsetRenderPriority(WebSettings.RenderPriority.HIGH)//多窗口supportMultipleWindows()//当webview调用requestFocus时为webview设置节点 webviewsetNeedInitialFocus(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" , "通知程序当前页面加载进度")}}