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];
}
}];