WKWebView--踩坑记

WKWebView:使用已是大势所趋

在混合开发横行的时代,对原生应用webview性能要求提出额巨大的挑战,有严重内存泄露的UIWebView在开发中的使用逐渐式微,有着更好性能的WKWebView开始大行其道。 除了一些用户量巨大的应用或者有特别变态要求的厂商(诸如中国某最大的通讯运营商),大部分公司对iOS系统最低版本的支持应该已经跃升到了iOS8.0。 从iOS8.0开始支持,无需在webview的兼容性上耗费巨大的时间和精力,对开发人员是个福音,对公司来讲也可以节省更多的时间成本和金钱成本。

截止到2017-06-05 不同系统的占有率

现实并不完美

因为笔者开发的应用中,有大量的场景都是和H5交互,在使用过程中经常会各种莫名奇妙的问题,开启漫漫的踩坑之路。。。

不同的WKWebView之间cookie不能同步

场景: 在一个webview里面打开一个网页,网页的内容是一些表单数据,点击每一条表单数据,打开一个新的webview(ps: 通过js调用原生的方法)跳转到数据的详情页。 加载表单列表页的时候,会存储一个cookies,打开详情页的时候,获取到该cookie,直接跳转到详情页。 —–but—-获取不到存储的cookie,所以直接跳转到登录页面了

执行完JS之后,报错: pointer being freed was not allocated set a breakpoint in malloc_error_break to debug

项目中有一个页面是通过JS加载本地的html文件,在didFinishNavigation方法中执行完js 代码之后,app直接崩溃,异常如下

1
2
error for object 0x1740b9560: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

经过排查,既不是代码问题,也不是WKWebView本身的问题,其实是因为原来用safari浏览器调试过js代码,修改一下safari的配置就可以了,如下图

取消掉上图红框内的选中状态就可以参考