iOS中html传数据给原生

我喜欢简单,所以就简单地说。

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,并没有卵用,后面我在研究研究这里怎么搞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值