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):