1.导航代理 WKNavigationDelegate 跟踪主框架导航进度和决定的方法
1.1
/**
* 在发送请求之前,决定是否跳转 (拦截url 从而达到js与oc交互的代码方法 就是这个)
*
* @param webView 实现该代理的 webView
* @param navigationAction 当前navigationAction 有关触发导航请求的操作的描述性信息。
* @param decisionHandler 是否调转block
*/
- (void)webView:(WKWebView*)webView decidePolicyForNavigationAction:(WKNavigationAction*)navigationAction decisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler;
1.2
**
* 在收到响应后,决定是否跳转
*
* @param webView 实现该代理的webview
* @param navigationResponse当前navigationAction 有关触发导航请求的操作的描述性信息。
* @param decisionHandler 是否跳转block
*/
- (void)webView:(WKWebView*)webView decidePolicyForNavigationResponse:(WKNavigationResponse*)navigationResponse decisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler;
1.3
/**
* 页面开始加载时调用
*
* @param webView 实现该代理的webview
* @param navigation有关触发导航请求的操作的描述性信息。
*/
- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation;
1.4
/**
* 接收到服务器跳转请求之后调用
*
* @param webView 实现该代理的webview
* @param navigation 当前navigation
*/
- (void)webView:(WKWebView*)webView didReceiveServerRedirectForProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation;
1.5
/**
* 加载失败时调用
*
* @param webView 实现该代理的webview
* @param navigation 当前navigation
* @param error 错误
*/
1.6
/**
* 当内容开始返回时调用
*
* @param webView 实现该代理的webview
* @param navigation 当前navigation
*/
- (void)webView:(WKWebView*)webView didFailProvisionalNavigation:(null_unspecifiedWKNavigation*)navigation withError:(NSError*)error;
1.7
/** * 页面加载完成之后调用
* * @param webView 实现该代理的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的都会触发此代理,如果不要求验证,传默认就行
// 如果需要证书验证,与使用AFN进行HTTPS证书验证是一样的
- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition,NSURLCredential *__nullable credential))completionHandler
2 WKUIDelegate UI 代理
2.1// 创建一个新的WebView(标签带有 target='_blank' 时,导致WKWebView无法加载点击后的网页的问题。)
- (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 系统 提供的 方法 当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函数时,会触发此代理方法。 三种 alert
可以 看下这个 链接 WKWebView JS调用alert https://www.jianshu.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确定给定元素是否应显示预览。
- (BOOL)webView:(WKWebView*)webView shouldPreviewElement:(WKPreviewElementInfo*)elementInfoAPI_AVAILABLE(ios(10.0));