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

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

更多相关文章

  1. 如何使用Angular.js从json文件中使用id获取特定数据
  2. 如何从一个节点生成exe文件。js应用?
  3. zTree.js 异步加载地区例子
  4. 在批处理文件中使用JSMin
  5. 使用HTML文件中的React调用.js文件中的Javascript函数
  6. 在JavaScript中进行文件处理,第四部分:对象URLs
  7. [转]在网页中加入声音文件,并且用JavaScript对其进行播放控制
  8. 加载外部站点并更改其可视化
  9. 基于缓冲区数据创建文件

随机推荐

  1. 在MySQL数据库中搜索与多个Tag记录相关/
  2. Apache服务器压缩和利用浏览缓存问题
  3. phpcms日期--汉字与数字的转换
  4. PHP开发API接口注意事项
  5. YII2与Thinkphp整合阿里云OSS
  6. 使用php保存在SlickGrid中的更改。
  7. JS中utf8和GBK的字符编码转换
  8. thinkPHP的数据添加、修改、删除
  9. Laravel 5 PDO绑定变量数与令牌数不匹配
  10. 迭代XML元素并将元素推送到数组中