1.iOS與web交互的四種方式
(1).攔截URL(都適用)
優(yōu)點(diǎn):兼容性最好的方式,iOS7之前的只能使用這種方式,不需要等到頁(yè)面加載完就能實(shí)現(xiàn)OC調(diào)用JS或JS調(diào)用OC
缺點(diǎn):需要頻繁的解釋字符串得到相應(yīng)的方法名和傳值,且調(diào)用的方法也不能進(jìn)行回調(diào)傳值。
(2).JavaScriptCore (僅適用于UIWebView,iOS7+)
優(yōu)點(diǎn):比攔截URL使用更方便,效率更高
缺點(diǎn):必須等到頁(yè)面加載完成才能實(shí)現(xiàn)OC調(diào)用JS
(3).WKScriptMessageHandler (僅適用于 WKWebView,iOS8+)
WKWebView有兩個(gè)代理,一個(gè)是navigationDelegate,負(fù)責(zé)頁(yè)面跳轉(zhuǎn)相關(guān),另一個(gè)是UIDelegate,負(fù)責(zé)UI事件相關(guān)。
(4).WebViewJavaScriptBridge (都適用)
使用簡(jiǎn)單,就是在OC環(huán)境和Javascript環(huán)境各自保存一個(gè)相互調(diào)用的bridge對(duì)象,每一個(gè)調(diào)用之間都有id和callbackid來(lái)找到兩個(gè)環(huán)境對(duì)應(yīng)的處理。但是這個(gè)框架本身有bug,好在已經(jīng)有解決辦法,只是作者一直沒(méi)有更新。WebViewJavaScriptBridge的天然坑
2.userAgent
一般會(huì)在本身的userAgent基礎(chǔ)上拼接一些會(huì)經(jīng)常用到的信息,比如平臺(tái)(ios,android),用戶id等
NSString *userAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];//取出系統(tǒng)的userAgent
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"UserAgent" : customUserAgent}];//替換成自定義的userAgent
3.WKWebview
優(yōu)點(diǎn):更多的支持H5特性,更流暢(高達(dá)60fps的刷新率),內(nèi)置手勢(shì),增加了加載的進(jìn)度屬性,更細(xì)致的代理。
缺點(diǎn):WKWebView的坑(白屏問(wèn)題,cookie問(wèn)題,不支持URLProtocal攔截)
4.iOS與web交互的問(wèn)題