美文网首页
WebView坑总结(中)

WebView坑总结(中)

作者: 普通的程序员 | 来源:发表于2018-01-30 23:01 被阅读0次

    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

    相关文章

      网友评论

          本文标题:WebView坑总结(中)

          本文链接:https://www.haomeiwen.com/subject/nlmhzxtx.html