一、創(chuàng)建
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
//設(shè)置偏好設(shè)置
config.preferences = [[WKPreferencesalloc] init];
//默認(rèn)為0
config.preferences.minimumFontSize= 10;
//默認(rèn)認(rèn)為YES
config.preferences.javaScriptEnabled= YES;
//在iOS上默認(rèn)為NO,表示不能自動通過窗口打開
config.preferences.javaScriptCanOpenWindowsAutomatically= YES;
//打開網(wǎng)頁間的滑動返回
self.web.allowsBackForwardNavigationGestures=YES;
self.web=[[WKWebViewalloc]initWithFrame:CGRectMake(0, 60, WIDTH, HEIGHT-100) configuration:config];
二、WKNavigationDelegate代理
-?(void)webView:(WKWebView?*)webView?didStartProvisionalNavigation:(WKNavigation?*)navigation;
//當(dāng)內(nèi)容開始返回時調(diào)用
-?(void)webView:(WKWebView?*)webView?didCommitNavigation:(WKNavigation?*)navigation;
//頁面加載完成之后調(diào)用
-?(void)webView:(WKWebView?*)webView?didFinishNavigation:(WKNavigation?*)navigation;
//頁面加載失敗時調(diào)用
-?(void)webView:(WKWebView?*)webView?didFailProvisionalNavigation:(WKNavigation?*)navigation;
頁面跳轉(zhuǎn)的代理分三種:
-?(void)webView:(WKWebView?*)webView?didReceiveServerRedirectForProvisionalNavigation:(WKNavigation?*)navigation;
//在收到響應(yīng)后,決定是否跳轉(zhuǎn)
-?(void)webView:(WKWebView?*)webView?decidePolicyForNavigationResponse:(WKNavigationResponse?*)navigationResponse?decisionHandler:(void?(^)(WKNavigationResponsePolicy))decisionHandler;
//在發(fā)送請求之前,決定是否跳轉(zhuǎn)
-?(void)webView:(WKWebView?*)webView?decidePolicyForNavigationAction:(WKNavigationAction?*)navigationAction?decisionHandler:(void?(^)(WKNavigationActionPolicy))decisionHandler;
WKUIDelegate代理
*??web界面中有彈出警告框時調(diào)用
*??@param?webView實(shí)現(xiàn)該代理的webview
*??@param?message警告框中的內(nèi)容
*??@param?frame主窗口
*??@param?completionHandler警告框消失調(diào)用
-?(void)webView:(WKWebView?*)webView?runJavaScriptAlertPanelWithMessage:(NSString?*)message?initiatedByFrame:(void?(^)())completionHandler;
通過message獲取到JS發(fā)送過來的消息,一定要完成completionHandler()回調(diào),不然一直在崩潰
OC向JS傳值、調(diào)用JS方法
[self.web evaluateJavaScript:[NSString stringWithFormat:@"resultData('%@')",jsonstr]completionHandler:nil];
通過evaluateJavaScript方法,向JS注冊方法名以及傳值(傳值格式必須是JS的格式)
JS向OC傳值、調(diào)用JS方法
在初始化WKWebView時,通過configuration.userContentController的addScriptMessageHandler方法,傳入方法名(需要跟JS約定好同一個名字),方便調(diào)用。
[self.web.configuration.userContentControlleraddScriptMessageHandler:self name:@"closeMe"];
在WKScriptMessageHandler代理中根據(jù)之前約定好的方法名獲取參數(shù)
- (void)userContentController:(WKUserCon?tentController*)userContentController
didReceiveScriptMessage:(WKScriptMessage*)message {};
message.name與message.boby