我喜欢简单,所以就简单地说。
html是一个规则,包含的东西有点多,我只说一种,就是点击web也上的一个含有url的按钮或者超链接,这个url里带有数据,然后本地解析出来这些数据。
首先要准备一个html文件,或者是从后台请求的html文件。还要准备一个js文件,如果嫌麻烦,可以不用。我的处理方法是在原生里面简单的注入了一句js。
<body>
<br />
<a href="test://login?name=lizhongyuan&password=123456">点击链接</a>
</body>
在html里面加上这一句,如果公司有懂html的,让他帮着写,不复杂。
_webviewTest = [[UIWebView alloc]initWithFrame:CGRectMake(0, 64, WIDTH, HEIGHT-64)];
_webviewTest.delegate = self;
[self.view addSubview:_webviewTest];
原生里面就是add一个uiwebview。
NSURL *baseURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
NSString *path = [[NSBundle mainBundle] pathForResource:@"testhtml" ofType:@"html"];
NSString *html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[_webviewTest loadHTMLString:html baseURL:baseURL];
我这里是在本地加载这个html,当然如果你是从网络获取的,直接加载就可以了。目的就是把这个web页面展示出来。如果你的html或者css或者js没有展示出来或者没有执行,自行查资料。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL *url = [request URL];
if([[url scheme] isEqualToString:@"test"]) {
//处理JavaScript和Objective-C交互
if([[url host] isEqualToString:@"login"])
{
//获取URL上面的参数
NSDictionary *params = [self dictionaryFromQuery:url.absoluteString usingEncoding:NSUTF8StringEncoding];
// BOOL status = [self login:[params objectForKey:@"name"] password:[params objectForKey:@"password"]];
NSLog(@"%@",params);
if(/* DISABLES CODE */ (1))
{
//调用JS回调
[webView stringByEvaluatingJavaScriptFromString:@"alert('登录成功!')"];
}
else
{
[webView stringByEvaluatingJavaScriptFromString:@"alert('登录失败!')"];
}
}
return NO;
}
return YES;
}
这个方法是加载html以后响应html里面的点击事件。这里就会获得href,剩下的就是解析这个href。
- (NSDictionary*)dictionaryFromQuery:(NSString*)query usingEncoding:(NSStringEncoding)encoding {
NSCharacterSet* delimiterSet = [NSCharacterSet characterSetWithCharactersInString:@"?&;"];
NSMutableDictionary* pairs = [NSMutableDictionary dictionary];
NSScanner* scanner = [[NSScanner alloc] initWithString:query];
while (![scanner isAtEnd]) {
NSString* pairString = nil;
[scanner scanUpToCharactersFromSet:delimiterSet intoString:&pairString];
[scanner scanCharactersFromSet:delimiterSet intoString:NULL];
NSArray* kvPair = [pairString componentsSeparatedByString:@"="];
if (kvPair.count == 2) {
NSString* key = [[kvPair objectAtIndex:0]
stringByReplacingPercentEscapesUsingEncoding:encoding];
NSString* value = [[kvPair objectAtIndex:1]
stringByReplacingPercentEscapesUsingEncoding:encoding];
[pairs setObject:value forKey:key];
}
}
return [NSDictionary dictionaryWithDictionary:pairs];
}
这个方法是切割字符串,把“?”“&”“;”分割的字符串拿出来,然后把用等号配对的两个值,以KVO的模式组成键值对,最后存进字典,返回字典。
if(/* DISABLES CODE */ (1))
{
//调用JS回调
[webView stringByEvaluatingJavaScriptFromString:@"alert('登录成功!')"];
}
else
{
[webView stringByEvaluatingJavaScriptFromString:@"alert('登录失败!')"];
}
这句是执行JS,并没有卵用,后面我在研究研究这里怎么搞。