目前的交互設(shè)計(jì)是基于WKWebView的,我看過(guò)許多交互的方式叔营,但由于公司的項(xiàng)目需求多樣化谓罗,需要比較靈活的方式去配合前端。
蘋(píng)果對(duì)于用WKWebView與原生交互相比較UIWebview提供更加強(qiáng)大與便利的方式崎苗。
用于與前端交互的WKWebView的代理方法狐粱,當(dāng)前的代理方法中有一個(gè)前端傳過(guò)來(lái)的類(lèi)型為WKScriptMessage的參數(shù)message舀寓,它有兩個(gè)屬性,message.name是前端需要與原生交互的需要肌蜻,message.body是前端傳過(guò)來(lái)的參數(shù)互墓。如果我們?cè)谶@個(gè)代理方法里面寫(xiě)許多message.name的條件語(yǔ)句,這樣會(huì)使當(dāng)前文件的代碼非常臃腫冗余
所以我們需要和前端同事協(xié)商好交互方式蒋搜,固定交互格式篡撵,這樣就可以就交互方式封裝起來(lái)。一下是我們公司協(xié)商的交互格式豆挽。這樣就可以不以message.name作為判斷條件育谬,直接通過(guò)message.body里的func作為方法識(shí)別字符代替message.name,Parameters為前端傳遞過(guò)來(lái)的參數(shù)帮哈,callBackId為每一個(gè)方法必帶的膛檀,作為回掉給前端的識(shí)別符。為了整個(gè)交互的完整和統(tǒng)一,我門(mén)回掉給前端的格式也是固定的咖刃,返回的類(lèi)似服務(wù)器返回給咱們的格式泳炉。
所以交互的代理方法就可以寫(xiě)成如下這樣就基本實(shí)現(xiàn)了iOS與前端的交互。
接下來(lái)記錄我在交互過(guò)程中問(wèn)題箩帚。
-
WKWebView在注冊(cè)與前端交互的方法時(shí)之景,使內(nèi)存無(wú)法釋放,這是由于WKWebView與Js的交互循環(huán)引用導(dǎo)致的膏潮。
解決辦法:從新創(chuàng)建一個(gè)類(lèi)锻狗,弱化代理