iOS開發之 WKWebVeiw使用
想用UIWebVeiw做的,但是突然想起來在iOS8中出了一個新的WKWebView,算是UIWebVeiw的升級版。本著對新事物的好奇,就上網查了一下,但是找了好多個都沒說的多了詳細,于是就問谷歌,找文檔,看看使用方法,試用了一下,果然不錯,記錄下來,大家分享!
WKWebView的特點:
性能高,穩定性好,占用的內存比較小,
支持JS交互
支持HTML5 新特性
可以添加進度條(然并卵,不好用,還是習慣第三方的)。
支持內建手勢,
據說高達60fps的刷新頻率(不卡)
創建時候很簡單
導入Wbkit這個類庫(WKWebVeiw包含在里面的)
遵守協議(一般前兩個就行啦,第三個主要是與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代理有兩個,是WKNavigationDelegate和WKUIDelegate,可以根據需要來決定用那些方法(當然使用之前不要忘了遵守協議)。
他們兩個的代理方法有好多個,不過有的不常用就不寫了,需要的自己點進去看一下就行啦。。。
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,看起來跟自己做的一樣的.)
iOS WKWebView
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 公司剛上架的app,活動當天因為web崩潰的bug郵件一大堆,就是這孫子啦 原因就是:我們自己的web頁不會有二級...
- 有兩種方法, 第一種: - (void)webView:(WKWebView *)webView didStart...
- 消除下圖中鍵盤工具欄 先創建一個類 NoInputAccessoryView.h #import <Foundat...
- 在使用WKWebView時,發現當前控制器pop完之后沒有執行dealloc方法,存在內存泄漏。 首先排查了一下b...