WKWebView

1.WKWebView

wkwebview是苹果在2014年的新一代webView组件,用于替代原来的UIWebView,目前APP上架使用UIWebView可能会被拒审,所以WKWebView对于ios开发者是必要的技能。

2.WKWebView交互

1.WKViewConfiguratioin

初始化webView的配置

点击查看代码
    WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
    config.preferences.minimumFontSize = 18;
    config.preferences.javaScriptCanOpenWindowsAutomatically = YES;
	//添加脚本函数
    [config.userContentController addScriptMessageHandler:self name:@"jsCallOCNoParameter"];
    [config.userContentController addScriptMessageHandler:self name:@"jsCallOCTwoParameter"];
    [config.userContentController addScriptMessageHandler:self name:@"jsCallOCOneParameter"];
    [config.userContentController addScriptMessageHandler:self name:@"share"];
    [config.userContentController addScriptMessageHandler:self name:@"shareNew"];
    [config.userContentController addScriptMessageHandler:self name:@"finishLoad"];
    [config.userContentController addScriptMessageHandler:self name:@"finishLoadSendTwoValue"];

2.加载h5Url

点击查看代码
    NSString *path = [[NSBundle mainBundle] pathForResource:@"javaScript" ofType:@"html"];
    NSString *htmlString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    [self.webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];

3.JS调用OC

点击查看代码
- (void)userContentController:(nonnull WKUserContentController *)userContentController didReceiveScriptMessage:(nonnull WKScriptMessage *)message {
	//判断js的函数名
	if ([message.name isEqual:@"jsCallOCNoParameter"]) {
        NSLog(@"click jsCallOCNoParameter");
    } else if ([message.name isEqual:@"jsCallOCOneParameter"]) {
        NSLog(@"click jsCallOCOneParameter");
    } else if ([message.name isEqual:@"jsCallOCTwoParameter"]) {
        NSLog(@"click jsCallOCTwoParameter");
    } else if ([message.name isEqual:@"shareNew"]) {
        NSLog(@"click shareNew");
    }
	}

4.OC调用JS

点击查看代码
//把两个参数合成一个参数传递进去
   NSString *value_1 = @"方法1 - 参数1";
   NSString *value_2 = @"方法1 - 参数2";
   NSString *value = [NSString stringWithFormat:@"%@,%@",value_1,value_2];
   NSString *functionOne = [NSString stringWithFormat:@"finishLoad('%@')",value];
   //为了验证是否能够成功t调用OC -> JS 方法,我会传一个参数进去,然后JS -> OC的方法吧参数传出来。验证是否成功调用。
   [self.webView evaluateJavaScript:functionOne completionHandler:^(id _Nullable title, NSError * _Nullable error) {
       //这里是OC -> JS 方法之后的回调。可以在里面执行调用方法之后的操作,一般是刷新网页,但是要注意的是。要一个标志摔性能页面的时候,不然的话进入死循环。
       if (self.reload == NO) {
           self.reload = YES;
           [self.webView reload];
       }
   }];
	NSString *userID = @"方法2 - 参数1";
   NSString *accountID = @"方法2 - 参数2";
   NSString *functionTwo = [NSString stringWithFormat:@"finishLoadSendTwoValue('%@','%@')",userID,accountID];
   //为了验证是否能够成功t调用OC -> JS 方法,我会传一个参数进去,然后JS -> OC的方法吧参数传出来。验证是否成功调用。
   [self.webView evaluateJavaScript:functionTwo completionHandler:^(id _Nullable title, NSError * _Nullable error) {
       //这里是OC -> JS 方法之后的回调。可以在里面执行调用方法之后的操作,一般是刷新网页,但是要注意的是。要一个标志摔性能页面的时候,不然的话进入死循环。
       if (self.reload == NO) {
           self.reload = YES;
           [self.webView reload];
       }
   }];
原文地址:https://www.cnblogs.com/plys/p/15433511.html