4.设置webChromeClient的坑
我这里讲几个典型的,
onProgressChanged,用于显示网页加载进度的,不然在加载网页的时候,急躁的用户看不到,呵呵,个辣鸡。
mProgress走到100就代表网页彻底加载完毕,但是限于某些网站的网页写法不是很规整,内容先写出来,但是广告脚本乱插,导致加载很慢,看起来就像
明明网页内容都出来了,但是进度条卡住了。裤子都脱了,洗澡水还没放完。
PS:CrashReport.setJavaScriptMonitor是腾讯bugly监听网页崩溃的api,要求放在这里-----安利一下腾讯的bugly,自动上报崩溃和log,比某些猴子好用多了,而且这种log,猴子抓一辈子都抓不出。
onJSAlert
处理响应网页中的alert弹窗。
承接1中的webview初始化方式,如果按照手动创建,无论如何,这个alert弹窗是看不到的,如果是xml中创建webview,alert弹窗老老实实的弹出。
这里不是setting中allowWindowOpen(名字记不清了,允许自动弹窗)的问题,在控制台中能看到确实响应了这个回调(这里return false是不响应)
所以问题出在view层,alert弹框被覆盖了。不信你们自己试。
后台兄弟每次和我联调必开alert,所以不能因为内存泄漏而顾此失彼。
解决方案就是把 alert的信息用dialog方式展示。
image网页原生方法横屏播放。
在播放网页视频时,总觉得竖屏播放不爽,想横屏,然后无非
1.打开自动旋转,GG,亲,如果activity不做处理的话,webview会重刷新一次。原因为什么....去搜“横竖屏切换时候Activity的生命周期”;
2.点击网页里的 缩放按钮,结果发现只是从小屏幕变成了全屏里的小屏幕。
并不是真正意义的全屏(横屏播放)
想真正意义的横屏,就得复写onShowCustomView和onHideCustomView
通过两个变量 View mCustomView,CustomViewCallback mCustomViewCallback搞事。
image那么这里的坑在哪呢?-----这样的横屏,样式,超级无敌阿姆斯特朗回旋加速丑,而且Android4 5 6的样式还各不一样,乃至于这样的横屏在某一部分机型上出现只有声音,画面白屏的问题。
所以很少有做这样的低级横屏。
出现后面白屏的原因,推测大概是网页中有iFrame字段,这个坑我下文也会总结。
那么解决方案,只有治标不治本的,
1.提高minSDK至23;
2.不横屏;
3.出钱让用户买iPhone;
4.换内核---后边也会讲到。
5.设置webviewClient的坑。
稍微搞过一点HTML5的同学就会知道,javaScript很厉害,比如最厉害的那个去百度广告的js.就是当页面加载baidu相关域名时,js把整个页面屏蔽。
是的,我们业务里涉及到要注入js,
坑1:注入js的时机要掌握好,用js去除页面广告,如果放在onLoadResource,可能会出现注入十几次的情况,导致页面闪烁,加flag控制,又怕页面广告资源还没加载,结果被flag怼住了。
坑2:应用允许js注入的话,在上架某些市场的时候会有
因打开addJavaScriptInterface()引起的安全问题.
这个问题主要是因为会有恶意的js代码注入,尤其是在已经获取root权限的手机上,一些恶意程序可能会利用该漏洞安装或者卸载应用.
坑1的解决方法是在 onPageFinished 的时候再注入js
坑2的解决方法是。。。。提高minSDK至4.4
image但是你以为这样就解决坑1了??太年轻!!!
你见过onPageFinish回调响应两三次的情况么?
为什么?因为网页里有iFrame,iframe就像是另一个次元,一个网页里镶嵌了另一个网页,也就是 父网页并没有finish, 而iframe加载finish,此时响应一次onPageFished,父网页最后再响应一次onPageFinish,这样整个就响应了两次。
所以用onPageFinish来判断网页是否加载完毕,其实是不准确的。
承接上文的onProgressChanged,一样是坑。
所以就出现了一种情况,要在onPageFinish里注入去广告js,而网页的广告资源是在iframe后出现(对,某些视频网站的写法就是这样无敌棒),那无论如何也去不掉广告的。
所以,不要再问什么 为什么xx网页微信打得开,浏览器就打不开。
xx网页里要么有flash,要么有iframe,然后这台机器的web内核是个渣渣。
shouOverriddingUrlLoading回调
由网页处理转向开发者处理。
用在处理 页面里的自定义协议。
坑在,有的协议会让你打开某些应用,而你的机器又没有这些应用,强行用
Intent 处理这种自定义行为,会造成崩溃。
所以这种坑的解决方法
以http和https的就网页处理
其余的return ture,但是啥也不做。
image那么webviewClient里还有其余类似 receiveError的回调,
这个我就不多说了,多参考Android开发者网站,现在开发者网站谷歌也开了中国版,这里的api处理文档写得很清楚,坑不多。
6.网页内容类型。
这里暂时没遇到坑。
讲一下需求实现。
需求:长按网页里的图片,实现保存图片。
实现,对网页进行监听(手势这块过两天再总结)
网页内容通过 Webview.HitTestResult.getType来判断内容类型。这里我们拿到image类型即可。
比较简单。
image
网友评论