ios wkwebview

介紹

WWDC2014推出ios8巧骚,其中webkit對(duì)應(yīng)的WKWebView相對(duì)于uiwebview更加強(qiáng)大,內(nèi)存圾结、加載速度更優(yōu)瑰剃。

  • 在性能、穩(wěn)定性筝野、功能方面有很大提升
  • 允許JavaScript的Nitro庫(kù)加載并使用(UIWebView中限制)
  • 支持了更多的HTML5特性
  • 高達(dá)60fps的滾動(dòng)刷新率以及內(nèi)置手勢(shì)
  • 將UIWebViewDelegate與UIWebView重構(gòu)成了14類與3個(gè)協(xié)議

環(huán)境

Mac OS X 10.10.1

Xcode 6.1.1

iOS 8.1

初始化

#import <WebKit/WebKit.h>

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

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

//加載網(wǎng)頁(yè)
WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];
[self.view addSubview:webView];

WKWebView的代理方法

WKWebView的代理方法

WKNavigationDelegate

// 頁(yè)面開(kāi)始加載時(shí)調(diào)用
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
// 當(dāng)內(nèi)容開(kāi)始返回時(shí)調(diào)用
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
// 頁(yè)面加載完成之后調(diào)用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
// 頁(yè)面加載失敗時(shí)調(diào)用
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;

//頁(yè)面跳轉(zhuǎn)
// 接收到服務(wù)器跳轉(zhuǎn)請(qǐng)求之后調(diào)用
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;
// 在收到響應(yīng)后,決定是否跳轉(zhuǎn)
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
// 在發(fā)送請(qǐng)求之前歇竟,決定是否跳轉(zhuǎn)
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

執(zhí)行順序:

webView:decidePolicyForNavigationAction:decisionHandler(如果拒絕則后續(xù)無(wú)其他回調(diào))
webView:didStartProvisionalNavigation
webView:decidePolicyForNavigationResponse:decisionHandler(如果拒絕則收到error回調(diào))
webView:didCommitNavigation
webView:didFinishNavigation

2. WKUIDelegate

// 創(chuàng)建一個(gè)新的WebView
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;

//警告框挥唠、確認(rèn)框、輸入框
/**
 *  web界面中有彈出警告框時(shí)調(diào)用
 *
 *  @param webView           實(shí)現(xiàn)該代理的webview
 *  @param message           警告框中的內(nèi)容
 *  @param frame             主窗口
 *  @param completionHandler 警告框消失調(diào)用
 */
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(void (^)())completionHandler;

3. WKScriptMessageHandler

提高App與web端交互, 將接收到的JS腳本轉(zhuǎn)為OC或Swift對(duì)象

// 從web界面中接收到一個(gè)腳本時(shí)調(diào)用
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;

4.WKWebView加載JS

// 圖片縮放的js代碼
NSString *js = @"var count = document.images.length;for (var i = 0; i < count; i++) {var image = document.images[i];image.style.width=320;};window.alert('找到' + count + '張圖');"; 

// 根據(jù)JS字符串初始化WKUserScript對(duì)象 
WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; 
// 根據(jù)生成的WKUserScript對(duì)象焕议,初始化WKWebViewConfiguration 
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; 
[config.userContentController addUserScript:script]; 
_webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; 
[_webView loadHTMLString:@"<head></head>![](http://upload-images.jianshu.io/upload_images/832398-a96d086fbf5dc89c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)" baseURL:nil];
[self.view addSubview:_webView];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宝磨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唤锉,老刑警劉巖世囊,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異窿祥,居然都是意外死亡株憾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門晒衩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嗤瞎,“玉大人,你說(shuō)我怎么就攤上這事听系”雌妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵靠胜,是天一觀的道長(zhǎng)掉瞳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)髓帽,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任脑豹,我火速辦了婚禮郑藏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瘩欺。我一直安慰自己必盖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布俱饿。 她就那樣靜靜地躺著歌粥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拍埠。 梳的紋絲不亂的頭發(fā)上失驶,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音枣购,去河邊找鬼嬉探。 笑死,一個(gè)胖子當(dāng)著我的面吹牛棉圈,可吹牛的內(nèi)容都是我干的涩堤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼分瘾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼胎围!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤白魂,失蹤者是張志新(化名)和其女友劉穎汽纤,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碧聪,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冒版,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逞姿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辞嗡。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滞造,靈堂內(nèi)的尸體忽然破棺而出续室,到底是詐尸還是另有隱情,我是刑警寧澤谒养,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布挺狰,位于F島的核電站,受9級(jí)特大地震影響买窟,放射性物質(zhì)發(fā)生泄漏丰泊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一始绍、第九天 我趴在偏房一處隱蔽的房頂上張望瞳购。 院中可真熱鬧,春花似錦亏推、人聲如沸学赛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盏浇。三九已至,卻和暖如春芽狗,著一層夾襖步出監(jiān)牢的瞬間绢掰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工童擎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曼月,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓柔昼,卻偏偏與公主長(zhǎng)得像哑芹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捕透,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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

  • 一聪姿、WKWebView簡(jiǎn)介 UIWebView自iOS2就有碴萧,WKWebView從iOS8才有,毫無(wú)疑問(wèn)WKWeb...
    逍遙晨旭閱讀 8,490評(píng)論 2 16
  • APP開(kāi)發(fā)過(guò)程中末购,內(nèi)部加載網(wǎng)頁(yè)是很常見(jiàn)的交互破喻,手機(jī)端經(jīng)常使用webView加載網(wǎng)頁(yè)相關(guān)頁(yè)面。iOS8之前通常使用U...
    春鵬閱讀 1,105評(píng)論 1 0
  • 自從公司的ezbuy App最低支持版本提升到iOS8以后, 使用更多的iOS8以后才特有的新特性就被提上了議程,...
    ezbuy研發(fā)閱讀 2,126評(píng)論 1 2
  • 也曾在打給你電話前喝兩瓶啤酒壯壯膽盟榴。你在忙曹质,等你忙完的時(shí)候我卻因?yàn)閮善科【扑恕?/div>
    阿佳阿佳閱讀 239評(píng)論 0 2
  • 《南澳功利的祭祀文化》 文/陳秋妤 圖/王寶駒 注:未經(jīng)授權(quán),拒絕任何形式轉(zhuǎn)載擎场。 南澳島是一座葫蘆形海島羽德。島上有高...
    陳秋妤閱讀 537評(píng)論 0 1