目前的交互设计是基于WKWebView的,我看过许多交互的方式,但由于公司的项目需求多样化,需要比较灵活的方式去配合前端。
苹果对于用WKWebView与原生交互相比较UIWebview提供更加强大与便利的方式。
用于与前端交互的WKWebView的代理方法,当前的代理方法中有一个前端传过来的类型为WKScriptMessage的参数message,它有两个属性,message.name是前端需要与原生交互的需要,message.body是前端传过来的参数。如果我们在这个代理方法里面写许多message.name的条件语句,这样会使当前文件的代码非常臃肿冗余
所以我们需要和前端同事协商好交互方式,固定交互格式,这样就可以就交互方式封装起来。一下是我们公司协商的交互格式。这样就可以不以message.name作为判断条件,直接通过message.body里的func作为方法识别字符代替message.name,Parameters为前端传递过来的参数,callBackId为每一个方法必带的,作为回掉给前端的识别符。为了整个交互的完整和统一,我门回掉给前端的格式也是固定的,返回的类似服务器返回给咱们的格式。
所以交互的代理方法就可以写成如下 新建一个文件作为UWebViewController的扩展,将所有的交互方法全部都写这在这个文件里。 这样就可以让整个架构层次分明了。 接下来还有一个问题,就是如何实现iOS原生回掉给前端呢?这个时候就要用到callBackId了。这样就基本实现了iOS与前端的交互。
接下来记录我在交互过程中问题。
-
WKWebView在注册与前端交互的方法时,使内存无法释放,这是由于WKWebView与Js的交互循环引用导致的。
解决办法:从新创建一个类,弱化代理 这样就可以完美释放了 2.内存巨增的白屏问题 3.解决cookie问题
网友评论