1.導航代理?WKNavigationDelegate ?? 跟蹤主框架導航進度和決定的方法
1.1
/**
*? 在發(fā)送請求之前,決定是否跳轉 (攔截url 從而達到js與oc交互的代碼方法 就是這個)
*
*? @param webView? ? ? ? ? 實現(xiàn)該代理的 webView
*? @param navigationAction 當前navigationAction?有關觸發(fā)導航請求的操作的描述性信息。
*? @param decisionHandler? 是否調轉block
*/
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;
1.2
**
*? 在收到響應后,決定是否跳轉?
*
*? @param webView? ? ? ? ? ? 實現(xiàn)該代理的webview
*? @param navigationResponse當前navigationAction?有關觸發(fā)導航請求的操作的描述性信息。
*? @param decisionHandler? ? 是否跳轉block
*/
- (void)webView:(WKWebView*)webView decidePolicyForNavigationResponse:(WKNavigationResponse*)navigationResponse decisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler;
1.3
/**
*? 頁面開始加載時調用
*
*? @param webView? ? 實現(xiàn)該代理的webview
*? @param navigation有關觸發(fā)導航請求的操作的描述性信息。
*/
- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation;
1.4
/**
*? 接收到服務器跳轉請求之后調用
*
*? @param webView? ? ? 實現(xiàn)該代理的webview
*? @param navigation? 當前navigation
*/
- (void)webView:(WKWebView*)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation;
1.5
/**
*? 加載失敗時調用
*
*? @param webView? ? 實現(xiàn)該代理的webview
*? @param navigation 當前navigation
*? @param error? ? ? 錯誤
*/
1.6
/**
*? 當內容開始返回時調用
*
*? @param webView? ? 實現(xiàn)該代理的webview
*? @param navigation 當前navigation
*/
- (void)webView:(WKWebView*)webView didFailProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation withError:(NSError*)error;
1.7
/** * 頁面加載完成之后調用
?* * ?@param webView 實現(xiàn)該代理的webview?
* @param navigation 當前navigation
?*/
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation ;
1.8// 導航失敗時會回調
- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error ;
1.9
/ 對于HTTPS的都會觸發(fā)此代理,如果不要求驗證,傳默認就行
// 如果需要證書驗證,與使用AFN進行HTTPS證書驗證是一樣的
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition,NSURLCredential *__nullable credential))completionHandler
2?WKUIDelegate UI 代理
2.1// 創(chuàng)建一個新的WebView(標簽帶有 target='_blank' 時,導致WKWebView無法加載點擊后的網(wǎng)頁的問題。)
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
// 接口的作用是打開新窗口委托 WKFrameInfo *frameInfo = navigationAction.targetFrame;
if (![frameInfo isMainFrame]) {?
?[webView loadRequest:navigationAction.request];?
?}
returnnil;
}

就是解決 跳轉的時候 是 在 新窗口打開 鏈接 wkWebView 這邊 沒法跳轉 用這個方法 解決 跳轉問題?
2.2 ?9.0 系統(tǒng) 提供的 方法 ?當webView 關閉的時候 走的代理方法
- (void)webViewDidClose:(WKWebView*)webViewAPI_AVAILABLE(macosx(10.11), ios(9.0));
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_9_0
- (void)webViewDidClose:(WKWebView *)webView {NSLog(@"%s", __FUNCTION__);
}
#endif
2.3 ? 在JS端調用alert函數(shù)時,會觸發(fā)此代理方法。 ?三種 alert ?
可以 看下這個 鏈接 ?WKWebView JS調用alert??http://www.itdecent.cn/p/4717b48f6c59
- (void)webView:(WKWebView*)webView runJavaScriptAlertPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(void))completionHandler;
- (void)webView:(WKWebView*)webView runJavaScriptConfirmPanelWithMessage:(NSString*)message initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(BOOLresult))completionHandler;
?(void)webView:(WKWebView*)webView runJavaScriptTextInputPanelWithPrompt:(NSString*)prompt defaultText:(nullableNSString*)defaultText initiatedByFrame:(WKFrameInfo*)frame completionHandler:(void(^)(NSString*_Nullableresult))completionHandler;
2.4確定給定元素是否應顯示預覽。
- (BOOL)webView:(WKWebView*)webView shouldPreviewElement:(WKPreviewElementInfo*)elementInfoAPI_AVAILABLE(ios(10.0));