之前寫過(guò)一篇文章分析[UIWebView與WKWebView](UIWebView與WKWebView),在這基礎(chǔ)之實(shí)現(xiàn)繼承自UIView的控件CHWebView ,將它作為一個(gè)Container包裝UIWebView和WKWebView
Github地址:GitHub - chausson/CHWebView: 封裝iOS UIWebView常用功能的基礎(chǔ)控件(給開源的一個(gè)Star,謝謝)
實(shí)現(xiàn)的功能?
1.JS與OC的調(diào)用
2.自帶默認(rèn)進(jìn)度條屬性和協(xié)議
3.將UIWebView和WKWebView統(tǒng)一API
Demo
如何調(diào)用OC的方法
1.Object-C需要使用CHWebView并且注冊(cè)函數(shù)名稱
2.注冊(cè)接收對(duì)象(使用CHWebViewController的話默認(rèn)已經(jīng)注冊(cè))
3.實(shí)現(xiàn)注冊(cè)的函數(shù)類似這樣
4.JS如何調(diào)用?
當(dāng)OC這邊都準(zhǔn)備完畢,通過(guò)一行代碼即可實(shí)現(xiàn)調(diào)用OC的方法
OC將方法名獲取后通過(guò)RunTime的機(jī)制發(fā)送消息給注冊(cè)的對(duì)象
html這邊可以直接使用NativeBridge對(duì)象了,NativeBridge({name},{param})
name '表示OC的函數(shù)名稱'
param '表示需要傳入的參數(shù)难菌,支持Array,int,object,json'
像這樣
CHWebView中使用的是WKWebView基于webkit的支持,WKWebView在加載這個(gè)Web的時(shí)候苦始,默認(rèn)會(huì)注冊(cè)一個(gè)webkit.messageHandlers的對(duì)象暑脆,同時(shí)我在加載完成后注入了一個(gè)NativeBridge的對(duì)象懊直,目的是為了webkit.messageHandlers和JSContent注入對(duì)象API的統(tǒng)一曹傀。當(dāng)然也可以自己手動(dòng)在加載web的時(shí)候?qū)脒@段JS
?OC調(diào)用JS方法
WebView本身就支持調(diào)用js的方法菊匿,所以很方便影锈,只需要實(shí)現(xiàn)CHWebView中的invokeJavaScript:把JS執(zhí)行的方法傳入就可以。
?進(jìn)度條屬性
CHWebView中有一個(gè)協(xié)議是更新當(dāng)前web加載進(jìn)度的豌鹤,UIWebView中是在web加載的時(shí)候添加一個(gè)監(jiān)聽器去監(jiān)聽每次的請(qǐng)求數(shù)量作為一個(gè)進(jìn)度加載亡哄,WKWebView則是對(duì)系統(tǒng)默認(rèn)的進(jìn)度條屬性進(jìn)行監(jiān)聽。