WebView和WKWebView全面總結(jié)

一光羞、WKWebView簡介

在WWDC2014中纱兑,蘋果推出了最新的iOS8系統(tǒng)潜慎,其中也伴隨著很多控件的更新與升級。其中全新的WebKit庫讓人很是興奮局服。本文也將講解到WebKit中更新的WKWebView控件的新特性與使用方法驳遵,它很好的解決了UIWebView存在的內(nèi)存堤结、加載速度等諸多問題竞穷。

首先我們來看一下WKWebView的新特性

1.在性能、穩(wěn)定性鼠哥、功能方面有很大提升(最直觀的提升就是加載網(wǎng)頁是占用的內(nèi)存很少,測試加載不同網(wǎng)頁其內(nèi)存性能提升3倍到4倍,而且沒有緩存);

2.允許JavaScript的Nitro庫加載并使用(UIWebView中限制);

3.支持了更多的HTML5特性森渐;

4.高達(dá)60fps的滾動刷新率以及內(nèi)置手勢冒晰;

5.將UIWebViewDelegate與UIWebView重構(gòu)成了14類與3個協(xié)議(查看蘋果官方文檔)翩剪;

二前弯、WebView和WKWebView比較

UIWebView是蘋果繼承于UIView封裝的一個加載web內(nèi)容的類,它可以加載任何遠(yuǎn)端的web數(shù)據(jù)展示在你的頁面上,你可以像瀏覽器一樣前進(jìn)后退刷新等操作询枚。

1.webView常用初始化方式:

- (void)loadRequest:(NSURLRequest*)request;

最常用的一種方式金蜀,也是最簡單的一種方式。通過一個網(wǎng)頁URL來進(jìn)行加載尝胆,這個URL可以是遠(yuǎn)程的也可以是本地的含衔。

- (void)loadHTMLString:(NSString*)string baseURL:(NSURL*)baseURL;

這個方法需要將html文件讀取為字符串二庵,其中baseURL是我們自己設(shè)置的一個路徑催享,用于尋找html文件中引用的圖片等素材。

- (void)loadData:(NSData*)data MIMEType:(NSString*)MIMEType textEncodingName:(NSString*)textEncodingName baseURL:(NSURL*)baseURL;

這種加載方式用的比較少痰憎,但是比較靈活信殊,其中參數(shù)含義如下:

data是文件數(shù)據(jù)汁果,MIMEType是文件類型据德,textEncodingName是編碼類型跷车,一般是utf-8或者utf-16朽缴,baseURL是素材資源路徑密强。


2.一些常用的屬性和方法

@property(nonatomic,assign)id delegate; ?//設(shè)置webView的代理

@property(nonatomic,readonly,retain)UIScrollView*scrollView; //內(nèi)置的scrollView

@property(nonatomic,readonly,retain)NSURLRequest*request; //URL請求

- (void)reload; //重新加載數(shù)據(jù)

- (void)stopLoading; //停止加載數(shù)據(jù)

- (void)goBack; //返回上一級

- (void)goForward; //跳轉(zhuǎn)下一級

@property(nonatomic,readonly,getter=canGoBack)BOOL canGoBack; //獲取能否返回上一級

@property(nonatomic,readonly,getter=canGoForward)BOOL canGoForward; //獲取能否跳轉(zhuǎn)下一級

@property(nonatomic,readonly,getter=isLoading)BOOL loading; //獲取是否正在加載數(shù)據(jù)

- (NSString*)stringByEvaluatingJavaScriptFromString:(NSString*)script; //通過javaScript操作web數(shù)據(jù)

@property(nonatomic)BOOL scalesPageToFit; //設(shè)置是否縮放到適合屏幕大小

@property(nonatomic)BOOL allowsInlineMediaPlaybackNS_AVAILABLE_IOS(4_0);

設(shè)置是否使用內(nèi)聯(lián)播放器播放視頻

@property(nonatomic)BOOL mediaPlaybackRequiresUserActionNS_AVAILABLE_IOS(4_0);

設(shè)置視頻是否自動播放

@property(nonatomic)BOOL mediaPlaybackAllowsAirPlayNS_AVAILABLE_IOS(5_0);

設(shè)置音頻播放是否支持ari play功能

@property(nonatomic)BOOL suppressesIncrementalRenderingNS_AVAILABLE_IOS(6_0);

設(shè)置是否將數(shù)據(jù)加載如內(nèi)存后渲染界面

@property(nonatomic)BOOL keyboardDisplayRequiresUserActionNS_AVAILABLE_IOS(6_0);

設(shè)置用戶交互模式

3.webView協(xié)議中的方法

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType;

準(zhǔn)備加載內(nèi)容時調(diào)用的方法,通過返回值來進(jìn)行是否加載的設(shè)置

- (void)webViewDidStartLoad:(UIWebView*)webView;

開始加載時調(diào)用的方法

- (void)webViewDidFinishLoad:(UIWebView*)webView;

結(jié)束加載時調(diào)用的方法

- (void)webView:(UIWebView*)webView didFailLoadWithError:(NSError*)error;

加載失敗時調(diào)用的方法

4.和JS的一些交互

主要有兩方面:js執(zhí)行OC代碼或渤、oc調(diào)取寫好的js代碼

js執(zhí)行OC代碼:js是不能執(zhí)行oc代碼的系冗,但是可以變相的執(zhí)行,js可以將要執(zhí)行的操作封裝到網(wǎng)絡(luò)請求里面薪鹦,然后oc攔截這個請求掌敬,獲取url里面的字符串解析即可惯豆,這里用到代理協(xié)議的一個方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

oc調(diào)取寫好的js代碼:這里用到UIwebview的一個方法奔害。示例代碼一個是網(wǎng)頁定位楷兽,一個是獲取網(wǎng)頁title:


(二)华临、WKWebView

1.初始化

a.首先要引入WebKit庫

b.初始化方法分為以下兩種

- (instancetype)initWithFrame:(CGRect)frame; // 默認(rèn)初始化

- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration*)configurationNS_DESIGNATED_INITIALIZER; // 根據(jù)對webview的相關(guān)配置芯杀,進(jìn)行初始化


2.WKWebView屬性

WKBackForwardList:之前訪問過的web頁面的列表,可以通過后退和前進(jìn)動作來訪問到银舱。

WKBackForwardListItem: webview中后退列表里的某一個網(wǎng)頁瘪匿。

WKFrameInfo:包含一個網(wǎng)頁的布局信息。

WKNavigation:包含一個網(wǎng)頁的加載進(jìn)度信息寻馏。

WKNavigationAction:包含可能讓網(wǎng)頁導(dǎo)航變化的信息棋弥,用于判斷是否做出導(dǎo)航變化。

WKNavigationResponse:包含可能讓網(wǎng)頁導(dǎo)航變化的返回內(nèi)容信息诚欠,用于判斷是否做出導(dǎo)航變化顽染。

WKPreferences:概括一個webview的偏好設(shè)置。

WKProcessPool:表示一個web內(nèi)容加載池轰绵。

WKUserContentController:提供使用JavaScript post信息和注射script的方法粉寞。

WKScriptMessage:包含網(wǎng)頁發(fā)出的信息。

WKUserScript:表示可以被網(wǎng)頁接受的用戶腳本左腔。

WKWebViewConfiguration:初始化webview的設(shè)置唧垦。

WKWindowFeatures:指定加載新網(wǎng)頁時的窗口屬性。

WKNavigationDelegate:提供了追蹤主窗口網(wǎng)頁加載過程和判斷主窗口和子窗口是否進(jìn)行頁面加載新頁面的相關(guān)方法液样。

WKScriptMessageHandler:提供從網(wǎng)頁中收消息的回調(diào)方法振亮。

WKUIDelegate:提供用原生控件顯示網(wǎng)頁的方法回調(diào)。

3.WKWebView的代理方法

WKNavigationDelegate

該代理提供的方法鞭莽,可以用來追蹤加載過程(頁面開始加載坊秸、加載完成、加載失斉炫)褒搔、決定是否執(zhí)行跳轉(zhuǎn)

// 頁面開始加載時調(diào)用

-?(void)webView:(WKWebView*)webViewdidStartProvisionalNavigation:(WKNavigation*)navigation;

//?當(dāng)內(nèi)容開始返回時調(diào)用

-?(void)webView:(WKWebView*)webViewdidCommitNavigation:(WKNavigation*)navigation;

//?頁面加載完成之后調(diào)用

-?(void)webView:(WKWebView*)webViewdidFinishNavigation:(WKNavigation*)navigation;

//?頁面加載失敗時調(diào)用

-?(void)webView:(WKWebView*)webViewdidFailProvisionalNavigation:(WKNavigation*)navigation;

// 接收到服務(wù)器跳轉(zhuǎn)請求之后調(diào)用

-?(void)webView:(WKWebView*)webViewdidReceiveServerRedirectForProvisionalNavigation:(WKNavigation*)navigation;

//?在收到響應(yīng)后,決定是否跳轉(zhuǎn)

-?(void)webView:(WKWebView*)webViewdecidePolicyForNavigationResponse:(WKNavigationResponse*)navigationResponsedecisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler;

//?在發(fā)送請求之前喷面,決定是否跳轉(zhuǎn)

-?(void)webView:(WKWebView*)webViewdecidePolicyForNavigationAction:(WKNavigationAction*)navigationActiondecisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;

WKUIDelegate

- (WKWebView*)webView:(WKWebView*)webView createWebViewWithConfiguration:(WKWebViewConfiguration*)configuration forNavigationAction:(WKNavigationAction*)navigationAction windowFeatures:(WKWindowFeatures*)windowFeatures;?

//此代理方法用于創(chuàng)建一個新的WebView

WKScriptMessageHandler

這個協(xié)議中包含一個必須實(shí)現(xiàn)的方法星瘾,這個方法是提高App與web端交互的關(guān)鍵,它可以直接將接收到的JS腳本轉(zhuǎn)化為OC或Swift對象惧辈。

-?(void)userContentController:(WKUserContentController*)userContentControllerdidReceiveScriptMessage:(WKScriptMessage*)message;

總結(jié):

蘋果向我們提供WKWebView死相,擁有UIWebView的所有功能,目的就是為了替代之前UIWebView咬像,相比與UIWebView算撮,WKWebView不僅在加載web網(wǎng)頁時性能有巨大提升生宛,而且也提供了更多的方法與JS進(jìn)行交互。但是WKWebView要在ios8.0之后才能使用肮柜,因此陷舅,如果我們使用Swift來開發(fā)應(yīng)用,兼容版本從8.0開始時审洞,可以直接使用WKWebView莱睁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芒澜,隨后出現(xiàn)的幾起案子仰剿,更是在濱河造成了極大的恐慌,老刑警劉巖痴晦,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件南吮,死亡現(xiàn)場離奇詭異,居然都是意外死亡誊酌,警方通過查閱死者的電腦和手機(jī)部凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碧浊,“玉大人涂邀,你說我怎么就攤上這事∠淙瘢” “怎么了比勉?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驹止。 經(jīng)常有香客問我敷搪,道長,這世上最難降的妖魔是什么幢哨? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮嫂便,結(jié)果婚禮上捞镰,老公的妹妹穿的比我還像新娘。我一直安慰自己毙替,他們只是感情好岸售,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厂画,像睡著了一般凸丸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上袱院,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天屎慢,我揣著相機(jī)與錄音瞭稼,去河邊找鬼。 笑死腻惠,一個胖子當(dāng)著我的面吹牛环肘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播集灌,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼悔雹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了欣喧?” 一聲冷哼從身側(cè)響起腌零,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎唆阿,沒想到半個月后益涧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酷鸦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年饰躲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臼隔。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘹裂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出摔握,到底是詐尸還是另有隱情寄狼,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布氨淌,位于F島的核電站泊愧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏盛正。R本人自食惡果不足惜删咱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豪筝。 院中可真熱鬧痰滋,春花似錦、人聲如沸续崖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽严望。三九已至多艇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間像吻,已是汗流浹背峻黍。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工复隆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奸披。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓昏名,卻偏偏與公主長得像,于是被迫代替她去往敵國和親阵面。 傳聞我的和親對象是個殘疾皇子轻局,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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

  • 一、WebView WebView就是一個內(nèi)嵌瀏覽器控件样刷,在iOS中主要有兩種WebView:UIWebView和...
    iOS祎閱讀 1,083評論 0 2
  • 前言 關(guān)于UIWebView的介紹仑扑,相信看過上文的小伙伴們,已經(jīng)大概清楚了吧置鼻,如果有問題镇饮,歡迎提問。 本文是本系列...
    CoderLF閱讀 8,968評論 2 12
  • http://www.cnblogs.com/mddblog/p/5281748.html 一箕母、整體介紹 UIWe...
    F麥子閱讀 1,234評論 0 2
  • 前言 給大家介紹另外一種基于 iOS 8 新推出的 WKWebView 組件储藐,構(gòu)建出自己的混合開發(fā)框架。 WKWe...
    iwolfox閱讀 1,125評論 1 3
  • 1. 利用 WKWebView 進(jìn)行交互(系統(tǒng) API) 2. 利用 UIWebView 進(jìn)行交互(系統(tǒng) API)...
    ElvisSun閱讀 993評論 0 1