37- WKWebView項(xiàng)目實(shí)踐分享(一)- UIWebView回顧介紹

系列文章:

前言

環(huán)境:
XCode 9.3
iOS8-iOS11.3

年初,項(xiàng)目替換了WKWebView,過程中也遇到了很多問題鸯檬≡詈洌基于這些問題趁桃,結(jié)合網(wǎng)上的解決方案,自己進(jìn)行取舍以獲得一個最好的方案歇终。當(dāng)然這個最好,僅限于我目前而言逼龟。如果大家還有更高的方案评凝,希望能夠多多交流,畢竟坑不少腺律,大家一起填才能把坑填平奕短。

這篇文章主要是結(jié)合HTML5的發(fā)展歷史宜肉,對UIWebView和WKWebView進(jìn)行一個回顧和介紹◆岜看完之后谬返,你可以知道兩者的優(yōu)缺點(diǎn)、相關(guān)API日杈、已經(jīng)兩者的不同和限制遣铝。

UIWebView

UIWebView和HTML5的發(fā)展歷史

首先我們來看這張表格:

UIWebView和HTML5的發(fā)展歷史

從表格里邊我們可以看出,2008年早在iOS2.0的時候莉擒,UIWebView就已經(jīng)發(fā)布了酿炸,但是HTML5的規(guī)范正式定稿和火熱的使用是在2012年之后,中間差了4年涨冀。這4年時間對于互聯(lián)網(wǎng)來說變化很大了填硕。可想基于早期HTML標(biāo)準(zhǔn)設(shè)計(jì)的UIWebView自然就不可能完全的支持HTML5的特性了蝇裤。另外廷支,UIWebView使用的時候,內(nèi)存占用巨大栓辜,native和webView交互單一恋拍,新的WebView也是呼之欲出。所以2014年WWDC,伴隨著iOS8系統(tǒng)正式推出WKWebView藕甩。

UIWebView的API

打開UIWebView.h施敢,會發(fā)現(xiàn)蘋果提供的可操作的API很少。這就意味你在加載一個webView的時候狭莱,你能處理和掌控的環(huán)節(jié)和細(xì)節(jié)就很少僵娃。簡單歸下類,如下:

創(chuàng)建

UIWebView *webView = [[UIWebView alloc] initWithFrame:myFrame];
NSURLRequest *request = [NSURLRequest requestWithURL:myURL];
[webView loadRequest:request];

UIWebViewDelegate

// 是否允許加載網(wǎng)頁腋妙,也可獲取js要打開的url
(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
// 開始加載網(wǎng)頁
(void)webViewDidStartLoad:(UIWebView *)webView;
// 網(wǎng)頁加載完成
(void)webViewDidFinishLoad:(UIWebView *)webView;
// 網(wǎng)頁加載錯誤
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;

Cookie管理

 [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];

使用NSURLProtocol

// 注冊代理
 [NSURLProtocol registerClass:[self class]];
// 取消注冊代理
 [NSURLProtocol unRegisterClass:[self class]];
// 整個URL Loading System的入口默怨,進(jìn)行請求的過濾,篩選出需要進(jìn)行處理的請求,表示是否可以處理這個request
(BOOL)canInitWithRequest:(NSURLRequest *)request;
// 開始請求
(void)startLoading;,
// 取消執(zhí)行請求
(void)stopLoading;
//  還有一些發(fā)起NSURLSession請求骤素, 以及NSURLSession相關(guān)代理的方法
// ...

其他方法

- (void)reload;
- (void)stopLoading;
 
- (void)goBack;
- (void)goForward;

@property (nonatomic, readonly, getter=canGoBack) BOOL canGoBack; // 是否可以返回前一頁
@property (nonatomic, readonly, getter=canGoForward) BOOL canGoForward; // 是否可以向前一頁
@property (nonatomic, readonly, getter=isLoading) BOOL loading;

- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

@property (nonatomic) BOOL scalesPageToFit;

UIWebView的優(yōu)缺點(diǎn)

UIWebView的優(yōu)點(diǎn)

  • 操作Cookie很容易
  • 可以使用NSURLRequestCachePolicy緩存策略
  • 可以使用蘋果的黑魔法NSURLProtocol匙睹,可以輕松定義整個URL Loading System

在本文寫作的時候,發(fā)現(xiàn)好多大廠的App仍然在使用UIWebView济竹。讓大廠如此戀戀不舍的痕檬,想必是UIWebView的黑魔法NSURLProtocol,在自定義NSURLProtocol后送浊,我們就有機(jī)會對所有的請求進(jìn)行統(tǒng)一的處理梦谜,NSURLProtocol使用起來非常方便,它可以讓你:

  • 自定義請求和響應(yīng)
  • 提供自定義的全局緩存支持
  • 重定向網(wǎng)絡(luò)請求
  • 提供HTTP Mocking (方便前期測試)
  • 其他一些全局的網(wǎng)絡(luò)請求修改需求

WKWebView中并不能直接使用NSURLProtocol而且沒有直接暴露出其相關(guān)的API。關(guān)于UIWebView中的NSURLProtocol和URL Loading System這部分唁桩,可以看一下網(wǎng)易樂得團(tuán)隊(duì)的文章《NSURLProtocol》闭树,在文章開頭寫的言簡意賅。

UIWebView的缺點(diǎn)
這里可以說WKWebView的優(yōu)點(diǎn)就是它的缺點(diǎn)荒澡, 比如說:

  • 會導(dǎo)致APP占用內(nèi)存急劇上升
  • native與webView交互方式單一
  • 對H5新特性支持不是很好
  • API太少蔼啦,給開發(fā)者可控制的細(xì)節(jié)少

WKWebView

移步:《43- WKWebView項(xiàng)目實(shí)踐分享(二)- WKWebView介紹》)

參考

強(qiáng)烈建議如果你把下邊提到的參考文章也快速看下,作為拓展和補(bǔ)充:

交流


希望能和大家交流技術(shù)
Blog:http://www.lilongcnc.cc


·

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末仰猖,一起剝皮案震驚了整個濱河市捏肢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饥侵,老刑警劉巖鸵赫,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躏升,居然都是意外死亡辩棒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門膨疏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來一睁,“玉大人,你說我怎么就攤上這事佃却≌哂酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵饲帅,是天一觀的道長复凳。 經(jīng)常有香客問我,道長灶泵,這世上最難降的妖魔是什么育八? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮赦邻,結(jié)果婚禮上髓棋,老公的妹妹穿的比我還像新娘。我一直安慰自己惶洲,他們只是感情好按声,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著湃鹊,像睡著了一般儒喊。 火紅的嫁衣襯著肌膚如雪镣奋。 梳的紋絲不亂的頭發(fā)上币呵,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼余赢。 笑死芯义,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妻柒。 我是一名探鬼主播扛拨,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼举塔!你這毒婦竟也來了绑警?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤央渣,失蹤者是張志新(化名)和其女友劉穎计盒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芽丹,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡北启,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拔第。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咕村。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚊俺,靈堂內(nèi)的尸體忽然破棺而出懈涛,到底是詐尸還是另有隱情,我是刑警寧澤泳猬,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布肩钠,位于F島的核電站,受9級特大地震影響暂殖,放射性物質(zhì)發(fā)生泄漏价匠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一呛每、第九天 我趴在偏房一處隱蔽的房頂上張望踩窖。 院中可真熱鬧,春花似錦晨横、人聲如沸洋腮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽啥供。三九已至,卻和暖如春库糠,著一層夾襖步出監(jiān)牢的瞬間伙狐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贷屎,地道東北人罢防。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像唉侄,于是被迫代替她去往敵國和親咒吐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容