【记录】Android关于WebView无/有图模式切换实现方案
需求描述:使用WebView加载一个链接,实现有图、无图模式之间的切换
- 关于无图模式的2种理解
- 阻塞图片的加载,网页上图片以一种灰底的形式存在
- 完全实现图片的隐藏
1. 阻塞图片的加载
这个就比较简单了,WebView本身提供了api,这种方式一般也会作为优化网页显示速率的一种方式
// 阻塞图片加载wvWeb.settings.blockNetworkImage = true
2. 完全实现图片的隐藏
WebView本身并没有提供相关的方法,只能另寻出路,我们知道网页是以html语言编写的,我们只要拿到了网页源码,别说是图片隐藏了,简直可以为所欲为,既然方案出来了,就不要只限于想,一定要动手去淦。
在这里提供两种获取网页源码的方式
- 通过WebView加载一段js代码的方式获取
- 直接请求链接,下载其源码
2.1 通过WebView加载一段js代码的方式获取
直接上码
dataBinding.wvWeb.addJavascriptInterface(InJavaScriptLocalObj(), "java_obj")dataBinding.wvWeb.webViewClient = object : WebViewClient() {override fun shouldOverrideUrlLoading(view: WebView?,request: WebResourceRequest?): Boolean {view?.loadUrl(request?.url.toString())return true}// 拦截当前链接内所有请求,其实在这个方式也可以实现 阻塞图片的加载// 问题是无法根据一个统一的规则去判断这个链接是否是图片(如果是加载的公司自己的h5,完全可以制定这种规则)override fun shouldInterceptRequest(view: WebView?,request: WebResourceRequest?): WebResourceResponse? {Log.i(TAG, "shouldInterceptRequest: ${request?.url.toString()}")if (request?.url.toString()是图片)return WebResourceResponse(null, null, null)elsereturn super.shouldInterceptRequest(view, request)}// 页面加载完成时的回调override fun onPageFinished(view: WebView?, url: String?) {view?.loadUrl("javascript:window.java_obj.getSource('<head>'+" +"document.getElementsByTagName('html')[0].innerHTML+'</head>');")super.onPageFinished(view, url)}}inner class InJavaScriptLocalObj {@JavascriptInterfacefun getSource(src: String?) {Log.i(TAG, "source: $src")}}
2.2 直接请求链接,下载其源码
完全可以使用当时项目中的请求框架去下载网页源码,这里使用的是jsoup
三方库,这个库不仅可以获取源码,还可以解析处理html,提供了一整套非常省力的api,总之是一个好库,对于我这种对前端技术不咋熟悉还是非常nice的,具体使用自行google吧。
当我们拿到了html文本,就可以随心所欲了。
但是在测试过程中,微信公众号中的链接需要特殊处理。代码中有解释,请看
【记录】Android关于WebView无/有图模式切换实现方案相关推荐
- Android设置webView无图模式
代码示例: webSetting.setBlockNetworkImage(true); // 设置无图模式
- android的webview控件载入网页显示速度慢的究极解决方案,【转】Android的WebView控件载入网页显示速度慢的究极解决方案...
Android客户端中混搭HTML页面,会出现虽然HTML内容载入完成,标题也正常显示,但是整个网页需要等到近秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国外很多网站,也看过PhoneGap的代 ...
- Android 启动优化(一) - 有向无环图
前言 说到 Android 启动优化,大家第一时间可能会想到异步加载.将耗时任务放到子线程加载,等到所有加载任务加载完成之后,再进入首页. 多线程异步加载方案确实是 ok 的.但如果遇到前后依赖的关系 ...
- 【数据结构学习记录22】——有向无环图及其应用
有向无环图及其应用 一.有向无环图的概念 二.拓扑排序(AOV网) 1.概念 2.偏序与全序 a).偏序 b).全序 c).偏序与全序的区别 3.拓扑有序 4.拓扑排序的过程 三.关键路径(AOE网) ...
- Android开发-WebView/WebViewClient/WebChromeClient简介 API详述 【一】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面,注册 ...
- android培训内容明细,记录Android开发学习
记录Android开发学习 Menu菜单学习 1.掌握Android中菜单的创建. 2.掌握Intent信使组件. 创建菜单Menu 我们模仿微信菜单栏学习,创建一个于微信菜单栏相似的菜单 那么我们应 ...
- android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题
解决Android Studio 代码无提示无颜色区分问题 一.问题 ①java代码没有颜色区分,统一黑色 ②代码不会联想提示,原来打前几个字母便会联想到后面的内容 二.解决 打开File,将Powe ...
- android webview调js方法,Android中WebView与H5的交互,Native与JS方法互调
项目中经常用到WebView与H5的交互,一个是H5调本地方法,一个是本地调H5方法,在此记录一下. 首先,启用JS支持 //启用js支持 webSettings.setJavaScriptEnabl ...
- Android【WebView】
WebView全面解析 简介 WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面.它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览 ...
最新文章
- OSPF 协议中各种邻居状态的含义是什么?
- 【Leetcode】376. Wiggle Subsequence
- 指针做形参,形参的传递详解
- Linux管理员常用的组合命令
- php ezsql,ezSQL PHP数据库操作类库
- 云服务器的安全组各个端口代表什么意思?
- 【大数据部落】R在GIS中用ggmap地理空间数据分析
- iOS开发人员需要了解的苹果开发者账号与邓白氏编码
- 多媒体计算机的扫描仪属于感觉媒体吗,多媒体计算机中的扫描仪属于感觉媒体...
- 关于美图秀秀的flash在线版
- windows上连接ubuntu的向日葵,总是显示正在连接,马上就是连接已断开
- 五. python 字符串方法函数
- Java二维数组的错误写法分析
- 聊聊HTTPS环境DNS优化:美图App请求耗时节约近半案例
- html制作国字布局,各种经典布局--“国”字布局
- 浙教版数学作业本,参考答案如此下载
- c语言程序设计新编教程答案钱雪忠,新编C语言程序设计教程
- 嵌入式工程师是怎样炼成的(六)---- 我要考研
- python字典的长度怎么计算_关于如何知道python对象的字节大小,如数组和字典?:如何知道python对象的字节大小,如数组和字典? – 简单的方法...
- 分布式和集群的区别和联系