WKWebView 的使用簡(jiǎn)介

簡(jiǎn)介

WKWebView相對(duì)于UIWebView強(qiáng)大了很多,內(nèi)存的消耗相對(duì)少了择浊,所提供的接口也豐富了磕蒲。

現(xiàn)在談一談WKWebView的基本使用

  • navigationDelegate
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { // 類似UIWebView的 -webViewDidStartLoad:
    NSLog(@"didStartProvisionalNavigation");
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
}

- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation {
    NSLog(@"didCommitNavigation");
}

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { // 類似 UIWebView 的 -webViewDidFinishLoad:
    NSLog(@"didFinishNavigation");
    [self resetControl];
    if (webView.title.length > 0) {
        self.title = webView.title;
    }
}
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {
    // 類似 UIWebView 的- webView:didFailLoadWithError:
    
    NSLog(@"didFailProvisionalNavigation");
    
}
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
    
    decisionHandler(WKNavigationResponsePolicyAllow);
}


- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    // 類似 UIWebView 的 -webView: shouldStartLoadWithRequest: navigationType:
    
    NSLog(@"4.%@",navigationAction.request);
    NSString *url = [navigationAction.request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    
    decisionHandler(WKNavigationActionPolicyAllow); 
}
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler {
    
}
  • UIDelegate
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
    // 接口的作用是打開新窗口委托
    [self createNewWebViewWithURL:webView.URL.absoluteString config:configuration];
    
    return currentSubView.webView;
}

- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)())completionHandler
{    // js 里面的alert實(shí)現(xiàn),如果不實(shí)現(xiàn)鸭叙,網(wǎng)頁(yè)的alert函數(shù)無(wú)效
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
                                                                             message:nil
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"確定"
                                                        style:UIAlertActionStyleCancel
                                                      handler:^(UIAlertAction *action) {
                                                          completionHandler();
                                                      }]];
    
    [self presentViewController:alertController animated:YES completion:^{}];
    
}
- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler {
    //  js 里面的alert實(shí)現(xiàn)霹娄,如果不實(shí)現(xiàn)能犯,網(wǎng)頁(yè)的alert函數(shù)無(wú)效  , 

    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:message
                                                                             message:nil
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"確定"
                                                        style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          completionHandler(YES);
                                                      }]];
    [alertController addAction:[UIAlertAction actionWithTitle:@"取消"
                                                        style:UIAlertActionStyleCancel
                                                      handler:^(UIAlertAction *action){
                                                          completionHandler(NO);
                                                      }]];
    
    [self presentViewController:alertController animated:YES completion:^{}];
    
}

- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *))completionHandler {
    
    completionHandler(@"Client Not handler");  
}
  • WKWebView 執(zhí)行腳本方法
- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler;
//completionHandler 擁有兩個(gè)參數(shù),一個(gè)是返回錯(cuò)誤犬耻,一個(gè)可以返回執(zhí)行腳本后的返回值
  • WKWebView 的Cookie問(wèn)題

UIWebView 中會(huì)自動(dòng)保存Cookie踩晶,如果登錄了一次,下次再次進(jìn)入的時(shí)候枕磁,會(huì)記住登錄狀態(tài)
而在WKWebView中渡蜻,并不會(huì)這樣,WKWebView在初始化的時(shí)候有一個(gè)方法

- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration
//通過(guò)這個(gè)方法计济,設(shè)置 configuration 讓W(xué)KWebView知道登錄狀態(tài)茸苇,configuration 可以通過(guò)已有的Cookie進(jìn)行設(shè)置,也可以通過(guò)保存上一次的configuration進(jìn)行設(shè)置
//參考 stackoverflow上回答:http://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303
WKWebView * webView = /*set up your webView*/
NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://example.com/index.html"]];
[request addValue:@"TeskCookieKey1=TeskCookieValue1;TeskCookieKey2=TeskCookieValue2;" forHTTPHeaderField:@"Cookie"];
// use stringWithFormat: in the above line to inject your values programmatically
[webView loadRequest:request];
WKUserContentController* userContentController = WKUserContentController.new;
WKUserScript * cookieScript = [[WKUserScript alloc] 
    initWithSource: @"document.cookie = 'TeskCookieKey1=TeskCookieValue1';document.cookie = 'TeskCookieKey2=TeskCookieValue2';"
    injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:NO];
// again, use stringWithFormat: in the above line to inject your values programmatically
[userContentController addUserScript:cookieScript];
WKWebViewConfiguration* webViewConfig = WKWebViewConfiguration.new;
webViewConfig.userContentController = userContentController;
WKWebView * webView = [[WKWebView alloc] initWithFrame:CGRectMake(/*set your values*/) configuration:webViewConfig];
最后編輯于
?著作權(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ō)我怎么就攤上這事霍狰÷詹荩” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蔗坯,是天一觀的道長(zhǎng)康震。 經(jīng)常有香客問(wèn)我,道長(zhǎng)宾濒,這世上最難降的妖魔是什么腿短? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮绘梦,結(jié)果婚禮上橘忱,老公的妹妹穿的比我還像新娘。我一直安慰自己卸奉,他們只是感情好钝诚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榄棵,像睡著了一般凝颇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疹鳄,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天拧略,我揣著相機(jī)與錄音,去河邊找鬼尚辑。 笑死辑鲤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杠茬。 我是一名探鬼主播月褥,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓢喉!你這毒婦竟也來(lái)了宁赤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栓票,失蹤者是張志新(化名)和其女友劉穎决左,沒(méi)想到半個(gè)月后愕够,有當(dāng)?shù)厝嗽跇淞掷锇l(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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堂鲤。 院中可真熱鬧亿傅,春花似錦、人聲如沸瘟栖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)半哟。三九已至酬滤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寓涨,已是汗流浹背盯串。 一陣腳步聲響...
    開封第一講書人閱讀 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)容

  • 最近遇到的問(wèn)的就是UIWebView這個(gè)內(nèi)存泄漏問(wèn)題..但是我只能說(shuō)似乎無(wú)解,只能叫html那邊優(yōu)化...iOS8...
    貝勒老爺閱讀 630評(píng)論 1 4
  • 前言 關(guān)于UIWebView的介紹沃呢,相信看過(guò)上文的小伙伴們年栓,已經(jīng)大概清楚了吧,如果有問(wèn)題薄霜,歡迎提問(wèn)某抓。 本文是本系列...
    CoderLF閱讀 8,963評(píng)論 2 12
  • 點(diǎn)擊查看http://blog.csdn.net/reylen/article/details/46437517
    爵笙彥閱讀 243評(píng)論 0 0
  • 前言 關(guān)于UIWebView的介紹,相信看過(guò)上文的小伙伴們副编,已經(jīng)大概清楚了吧负甸,如果有問(wèn)題流强,歡迎提問(wèn)痹届。 本文是本系列...
    Dark_Angel閱讀 28,867評(píng)論 67 291
  • WKWebView 是蘋果在 WWDC 2014 上推出的新一代 webView 組件,用以替代 UIKit 中笨...
    Aiana閱讀 4,585評(píng)論 1 8