OC中与html文件中的交互操作
2017-11-13 本文已影响0人
杭州七木科技
简单整理下在Oc编译环境下如何与html文件进行交互,本文介绍两种比较简单的交互方式
1.使用UIWebview代理方法拦截Url
2.使用JavaScriptCore框架进行操作
第一种方法 —— 拦截UIWebview中url
1.导入html文件,并进行相关编写操作
B4EEE6A0-D302-48C7-8201-A2F4E2EF52B1.png
2.加载UIWebView并设置代理
// 找到本地html文件并加载UIWebView
_webView.backgroundColor = [UIColor redColor];
_webView.delegate = self;
NSString *path = [[NSBundle mainBundle] pathForResource:@"First" ofType:@"html"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path]];
[_webView loadRequest:request];
3.交互操作
1.调用JS
NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"这里是JS中alert弹出的message"];
[_webView stringByEvaluatingJavaScriptFromString:jsStr];
// 向js方法中传入参数时,方法名不能写错 showAlert
2.代理方法拦截Url
#pragma mark - UIWebViewDelegate HTMl 交互OC
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL * url = [request URL];
// url ==>firstclick://shareClick?title=%E5%88%86%E4%BA%AB%E7%9A%84%E6%A0%87%E9%A2%98&content=%E5%88%86%E4%BA%AB%E7%9A%84%E5%86%85%E5%AE%B9&url=%E9%93%BE%E6%8E%A5%E5%9C%B0%E5%9D%80&imagePath=%E5%9B%BE%E7%89%87%E5%9C%B0%E5%9D%80
if ([[url scheme] isEqualToString:@"firstclick"]) {
// [url scheme] ==> firstclick
NSArray *params =[url.query componentsSeparatedByString:@"&"];
NSMutableDictionary *tempDic = [NSMutableDictionary dictionary];
for (NSString *paramStr in params) {
NSArray *dicArray = [paramStr componentsSeparatedByString:@"="];
if (dicArray.count > 1) {
NSString *decodeValue = [dicArray[1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[tempDic setObject:decodeValue forKey:dicArray[0]];
}
}
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式一" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil];
[alertView show];
/*
把从js文件中拿到的数据分割处理成字典,保存到本地
拿到js中的内容tempDic:{
content = "\U5206\U4eab\U7684\U5185\U5bb9";
imagePath = "\U56fe\U7247\U5730\U5740";
title = "\U5206\U4eab\U7684\U6807\U9898";
url = "\U94fe\U63a5\U5730\U5740";
}
*/
NSLog(@"拿到js中的内容tempDic:%@",tempDic);
return NO;
}
return YES;
}
第二种方法 —— JavaScriptCore框架进行操作
1.导入html文件
1.png
2.导入JavaScriptCore.framework框架,并在项目导入头文件
导入框架.png 导入头文件.png
3.找到本地html文件加载UIWebview
NSString *path = [[NSBundle mainBundle] pathForResource:@"Second" ofType:@"html"];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path]];
[_webView loadRequest:request];
4.关键步骤 —— 交互操作
// 1.获取运行环境
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//2.定义好JS要调用的方法, share就是调用的share方法名
context[@"share"] = ^() {
NSLog(@"+++++++Begin Log+++++++");
NSArray *args = [JSContext currentArguments]; // 找到所用对应的参数内容
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式二" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil];
[alertView show];
});
// 3.列举出该方法中的JavaScript对象
for (JSValue *jsVal in args) {
NSLog(@"%@", jsVal.toString);
}
NSLog(@"-------End Log-------");
};
调用JS中的方法
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *textJS = @"showAlert('这里是JS中alert弹出的message')";
[context evaluateScript:textJS];
以上简单整理JS与OC交互的相关操作。