// 导入头文件 #import <WebKit/WebKit.h> // 遵循WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler @property (strong, nonatomic) WKWebView *webView; @property (strong, nonatomic) WKUserContentController *userContentController; - (void)initViews { WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; WKUserContentController *userContentController = [[WKUserContentController alloc] init]; self.userContentController = userContentController; [userContentController addScriptMessageHandler:self name:@"finish"]; configuration.userContentController = userContentController; WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, 375, 667) configuration:configuration]; webView.UIDelegate = self; webView.navigationDelegate = self; [self.view addSubview:webView]; self.webView = webView; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"url"] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:15]; // [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [self.webView loadRequest:request]; }
// [self.webView evaluateJavaScript:@"f(方法名)" completionHandler:nil]; // 调用js方法 #pragma mark - WKNavigationDelegate // (按触发顺序排列) // 在发送请求之前,决定是否跳转 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { // NSLog(@"发送请求前决定是否跳转======%@",navigationAction.request.URL.absoluteString); //允许跳转 decisionHandler(WKNavigationActionPolicyAllow); //不允许跳转 //decisionHandler(WKNavigationActionPolicyCancel); } // 页面开始加载时调用 - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { // NSLog(@"开始加载======%@",self.webView.URL.absoluteString); } // 在收到响应后,决定是否跳转 - (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { // NSLog(@"收到响应,决定是否跳转======%@",navigationResponse.response.URL.absoluteString); //允许跳转 decisionHandler(WKNavigationResponsePolicyAllow); //不允许跳转 //decisionHandler(WKNavigationResponsePolicyCancel); } // 当内容开始返回时调用 - (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation { // NSLog(@"内容开始返回======%@",self.webView.URL.absoluteString); } // 页面加载完成之后调用 - (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { // NSLog(@"页面加载完成======%@",self.webView.URL.absoluteString); } // 页面加载失败时调用 - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation { } // 接收到服务器跳转请求之后调用 - (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation { // NSLog(@"接收到服务器跳转请求======%@",webView.URL.absoluteString); } #pragma mark - WKUIDelegate // 创建一个新的WebView //- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures{ // return [[WKWebView alloc]init]; //} // 输入框 //- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(nullable NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * __nullable result))completionHandler{ // completionHandler(@""); //} // 确认框 //- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL result))completionHandler{ // completionHandler(YES); //} // 警告框 //- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler{ // completionHandler(); //} #pragma mark - WKScriptMessageHandler // js调用oc方法 js代码格式:window.webkit.messageHandlers.方法名.postMessage({body: 'hello world!'}); - (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { if ([message.name isEqualToString:@"方法名"]) { // 调用方法 } }