程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift運用WKWebView在iOS使用中調用Web的辦法詳解

Swift運用WKWebView在iOS使用中調用Web的辦法詳解

編輯:更多關於編程

Swift運用WKWebView在iOS使用中調用Web的辦法詳解。本站提示廣大學習愛好者:(Swift運用WKWebView在iOS使用中調用Web的辦法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift運用WKWebView在iOS使用中調用Web的辦法詳解正文


自從iOS8開端,Apple引入了WKWebView欲替代UIWebView。相比而言,WKWebView耗費內從更少,功用也愈加弱小。讓我們來看看WKWebView怎樣運用吧!

0.初始化
(1)首先需求引入WebKit庫

#import <WebKit/WebKit.h>

(2)初始化辦法分為以下兩種

// 默許初始化
- (instancetype)initWithFrame:(CGRect)frame;
// 依據對webview的相關配置,停止初始化
- (instancetype)initWithFrame:(CGRect)frame configuration:(WKWebViewConfiguration *)configuration NS_DESIGNATED_INITIALIZER;

(3)加載網頁與HTML代碼的方式與UIWebView相反,代碼如下:

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

1. WKWebView的代理辦法
(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;

頁面跳轉的代理辦法有三種,分為(收到跳轉與決議能否跳轉兩種)

// 接納到服務器跳轉懇求之後調用
- (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

// 創立一個新的WebView
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures;

剩下三個代理辦法全都是與界面彈出提示框相關的,針關於web界面的三種提示框(正告框、確認框、輸出框)辨別對應三種代理辦法。上面只舉了正告框的例子。

/**
 *  web界面中有彈出正告框時調用
 *
 *  @param webView           完成該代理的webview
 *  @param message           正告框中的內容
 *  @param frame             主窗口
 *  @param completionHandler 正告框消逝調用
 */
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(void (^)())completionHandler;

(3)WKScriptMessageHandler
這個協議中包括一個必需完成的辦法,這個辦法是進步App與web端交互的關鍵,它可以直接將接納到的JS腳本轉為OC或Swift對象。(當然,在UIWebView也可以經過“曲線救國”的方式與web停止交互,著名的Cordova框架就是這種機制)

// 從web界面中接納到一個腳本時調用
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message;

2.修正Info.plist
留意從iOS9開端,但凡觸及到網絡操作的,都要在Info.plist中參加:

10.總結
WKWebView的復雜運用就引見到這裡了!大家有興味可以為其添加更多功用!假如喜歡本文的話別忘了點擊喜歡哦!

後記
既然說WKWebView相比UIWebView耗費的內存更少,那麼我們就來實踐比照一下,我們讓它們加載同一個網站,後果如圖
(左為UIWebView,右為WKWebView):

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved