1.導(dǎo)航代理?WKNavigationDelegate ?? 跟蹤主框架導(dǎo)航進(jìn)度和決定的方法
1.1
/**
*? 在發(fā)送請(qǐng)求之前金赦,決定是否跳轉(zhuǎn) (攔截url 從而達(dá)到j(luò)s與oc交互的代碼方法 就是這個(gè))
*
*? @param webView? ? ? ? ? 實(shí)現(xiàn)該代理的 webView
*? @param navigationAction 當(dāng)前navigationAction?有關(guān)觸發(fā)導(dǎo)航請(qǐng)求的操作的描述性信息擎厢。
*? @param decisionHandler? 是否調(diào)轉(zhuǎn)block
*/
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;
1.2
**
*? 在收到響應(yīng)后钳恕,決定是否跳轉(zhuǎn)?
*
*? @param webView? ? ? ? ? ? 實(shí)現(xiàn)該代理的webview
*? @param navigationResponse當(dāng)前navigationAction?有關(guān)觸發(fā)導(dǎo)航請(qǐng)求的操作的描述性信息枢赔。
*? @param decisionHandler? ? 是否跳轉(zhuǎn)block
*/
- (void)webView:(WKWebView*)webView decidePolicyForNavigationResponse:(WKNavigationResponse*)navigationResponse decisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler;
1.3
/**
*? 頁(yè)面開(kāi)始加載時(shí)調(diào)用
*
*? @param webView? ? 實(shí)現(xiàn)該代理的webview
*? @param navigation有關(guān)觸發(fā)導(dǎo)航請(qǐng)求的操作的描述性信息。
*/
- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation;
1.4
/**
*? 接收到服務(wù)器跳轉(zhuǎn)請(qǐng)求之后調(diào)用
*
*? @param webView? ? ? 實(shí)現(xiàn)該代理的webview
*? @param navigation? 當(dāng)前navigation
*/
- (void)webView:(WKWebView*)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation;
1.5
/**
*? 加載失敗時(shí)調(diào)用
*
*? @param webView? ? 實(shí)現(xiàn)該代理的webview
*? @param navigation 當(dāng)前navigation
*? @param error? ? ? 錯(cuò)誤
*/
1.6
/**
*? 當(dāng)內(nèi)容開(kāi)始返回時(shí)調(diào)用
*
*? @param webView? ? 實(shí)現(xiàn)該代理的webview
*? @param navigation 當(dāng)前navigation
*/
- (void)webView:(WKWebView*)webView didFailProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation withError:(NSError*)error;
1.7
/** * 頁(yè)面加載完成之后調(diào)用
?* * ?@param webView 實(shí)現(xiàn)該代理的webview?
* @param navigation 當(dāng)前navigation
?*/
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation ;
1.8// 導(dǎo)航失敗時(shí)會(huì)回調(diào)
- (void)webView:(WKWebView *)webView didFailNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error ;
1.9
/ 對(duì)于HTTPS的都會(huì)觸發(fā)此代理,如果不要求驗(yàn)證,傳默認(rèn)就行
// 如果需要證書(shū)驗(yàn)證厢漩,與使用AFN進(jìn)行HTTPS證書(shū)驗(yàn)證是一樣的
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition,NSURLCredential *__nullable credential))completionHandler
2?WKUIDelegate UI 代理
2.1// 創(chuàng)建一個(gè)新的WebView(標(biāo)簽帶有 target='_blank' 時(shí),導(dǎo)致WKWebView無(wú)法加載點(diǎn)擊后的網(wǎng)頁(yè)的問(wèn)題岩臣。)
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
// 接口的作用是打開(kāi)新窗口委托 WKFrameInfo *frameInfo = navigationAction.targetFrame;
if (![frameInfo isMainFrame]) {?
?[webView loadRequest:navigationAction.request];?
?}
returnnil;
}
就是解決 跳轉(zhuǎn)的時(shí)候 是 在 新窗口打開(kāi) 鏈接 wkWebView 這邊 沒(méi)法跳轉(zhuǎn) 用這個(gè)方法 解決 跳轉(zhuǎn)問(wèn)題?
2.2 ?9.0 系統(tǒng) 提供的 方法 ?當(dāng)webView 關(guān)閉的時(shí)候 走的代理方法
- (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端調(diào)用alert函數(shù)時(shí)溜嗜,會(huì)觸發(fā)此代理方法。 ?三種 alert ?
可以 看下這個(gè) 鏈接 ?WKWebView JS調(diào)用alert??http://www.reibang.com/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確定給定元素是否應(yīng)顯示預(yù)覽架谎。
- (BOOL)webView:(WKWebView*)webView shouldPreviewElement:(WKPreviewElementInfo*)elementInfoAPI_AVAILABLE(ios(10.0));