iOS開發之WKWebView簡單使用和常用使用情境

來源:互聯網
上載者:User

標籤:str   block   less   dir   nav   abs   字元   ane   roo   

iOS開發之 WKWebVeiw使用

想用UIWebVeiw做的,但是突然想起來在iOS8中出了一個新的WKWebView,算是UIWebVeiw的升級版。本著對新事物的好奇,就上網查了一下,但是找了好多個都沒說的多了詳細,於是就問Google,找文檔,看看使用方法,試用了一下,果然不錯,記錄下來,大家分享!

WKWebView的特點:
  • 效能高,穩定性好,佔用的記憶體比較小,
  • 支援JS互動
  • 支援HTML5 新特性
  • 可以添加進度條(然並卵,不好用,還是習慣第三方的)。
  • 支援內建手勢,
  • 據說高達60fps的重新整理頻率(不卡)
建立時候很簡單
  1. 匯入Wbkit這個類庫(WKWebVeiw包含在裡面的)

  2. 遵守協議(一般前兩個就行啦,第三個主要是與JS相關的東西,這個協議中包含一個必須實現的方法,這個方法是提高App與web端互動的關鍵,它可以直接將接收到的JS指令碼轉為OC或Swift對象--網上大神說的,我沒用過。)

@interface ViewController : UIViewController<WKNavigationDelegate,WKUIDelegate,WKScriptMessageHandler>

3.建立個WebView的對象

    WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.bounds];    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.baidu.com"]]];    [self.view addSubview:webView];

這裡有個注意點,網址一定要寫完整,加上https://我剛開始懶,沒有加,屋裡怎麼試都載入不出來,顯示個白屏!!血的教訓啊!!

WKWebView有兩個委託

WKWebView代理有兩個,是WKNavigationDelegateWKUIDelegate,可以根據需要來決定用那些方法(當然使用之前不要忘了遵守協議)。

他們兩個的代理方法有好多個,不過有的不常用就不寫了,需要的自己點進去看一下就行啦。。。

1. WKNavigationDelegate來追蹤載入過程

// 頁面開始載入時調用- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;// 當內容開始返回時調用- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;// 頁面載入完成之後調用- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;// 頁面載入失敗時調用- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;

WKNavigtionDelegate來進行頁面跳轉

// 接收到伺服器跳轉請求之後再執行- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;// 在收到響應後,決定是否跳轉- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;// 在發送請求之前,決定是否跳轉- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;

2. WKUIDelegate

//1.建立一個新的WebVeiw- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;//2.WebVeiw關閉(9.0中的新方法)- (void)webViewDidClose:(WKWebView *)webView NS_AVAILABLE(10_11, 9_0);//3.顯示一個JS的Alert(與JS互動)- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler;//4.彈出一個輸入框(與JS互動的)- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler;//5.顯示一個確認框(JS的)- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler;

(PS:WKUIDelegate主要是做跟網頁互動的,可以顯示javascript的一些alert或者Action,看起來跟自己做的一樣的.)

暫時就用到了這麼多,這個demo純粹是為了初學實驗的,具體複雜的使用方法等以後遇到了再說啊!!!!

這篇文章寫得非常詳細,大家也可以參考下

2016.11.26補充

補充載入頁面後自動關閉的問題

問題描述,我載入一web頁面後,進行各種操作,比說我儲值,什麼的,然後想要在儲值提出成功後自頂關閉這個web頁面回到上一層或者返回到某一個介面,就用下面的方法,一般判斷URL 包含的字串都是後台給定的,在這裡只需要判斷就好了!

//**WKNavigationDelegate**裡面的代理方法(上面有)- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{    //擷取請求的url路徑.    NSString *requestString = navigationResponse.response.URL.absoluteString;    WKLog(@"requestString:%@",requestString);    // 遇到要做出改變的字串    NSString *subStr = @"www.baidu.com";    if ([requestString rangeOfString:subStr].location != NSNotFound) {        WKLog(@"這個字串中有subStr");        //回調的URL中如果含有百度,就直接返回,也就是關閉了webView介面        [self.navigationController  popViewControllerAnimated:YES];    }    decisionHandler(WKNavigationResponsePolicyAllow);}

 

iOS開發之WKWebView簡單使用和常用使用情境

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.