OC与JS的简单的交互

现在iOS和html的混合开发是越来越普遍了,开发的效率也是大大的提高了,但是页面上的直接的交互也越来越重要了。今天又朋友问我,自己就小研究了下。
1.OC与heml的交互现在还是使用UIWedView这个控件
1>OC中调用heml中的方法时使用到UIWedView的stringByEvaluatingJavaScriptFromString的方法

  // 利用JS获得当前网页的标题
   [self.wedview stringByEvaluatingJavaScriptFromString:@"document.title;"];

2>网页上的操作让OC界面发生的变化我们需要用到UIWedView的代理的方法

/*  拦截wedview的请求
 *
 *  @param request        请求
 *
 *  @return 返回yes时可以发送请求  返回NO就是不可以
 */ 
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

下面来介绍下怎么实现的(在storybord拖控件设置大小,托线就不介绍了)
1.我们应该知道加载的那个网页是吧,我自己写了个本地的网页作为测试
// 加载网页 本地网页
[self.wedview loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]]];
// 设置代理
self.wedview.delegate = self;

2.实现代理

warning 注意系统的方法只能多穿两个方法

  /**
   *  拦截wedview的请求
  *
  *  @param request        请求
  *
  *  @return 返回yes时可以发送请求  返回NO就是不可以
 */
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
    // 获取点击按钮上要获取的发送的请求
    NSString *URLString =[request.URL absoluteString];
      // 判断发送的请求是否包含下列特定的字符(应为要用到交互,所以不是个正确的连接,这个和写JS的约定好)
      NSString *scheme = @"xmg://";
     if ([URLString containsString:scheme]) {
    // schem 后面的方法名字和参数截取下来
    NSString *path =[URLString substringFromIndex:scheme.length];
    // 将方法名字和参数利用特定的符号截取开来 这个用的是@“?“
    NSArray *array =[path componentsSeparatedByString:@"?"];
    // 获取到方法名字
    NSString *methodName = [array firstObject];
    // 将方法名中的_特殊符号用OC语法中的:替换掉,形成方法名
    NSString *newmethodName = [methodName stringByReplacingOccurrencesOfString:@"_" withString:@":"];
    // 获取参数
    NSArray *params = nil;
    // 判断下js发送的请求里面是否为有参数
    if (array.count == 2) {
        // 也是利用特殊的符号截取到参数的数组
        params = [[array lastObject] componentsSeparatedByString:@"&"];
    }
    // 判断是否有第二个参数
    NSString *twoString = params.count<=1?nil:[params lastObject];
      #warning 注意系统的方法只能多穿两个方法 ,我也查询了别人穿多个参数的方法,写了方法,后续上传
    // 调用方法
    [self performSelector:NSSelectorFromString(newmethodName) withObject:[params firstObject] withObject:twoString];
       #warning 注意 一定记得返回NO 不然就UIWedView就跳转页面了
    return NO;
       }
      return YES;
      }

3.注意 一定要在控制器中实现你要调用的方法,不然真的会崩溃的。
- (void)sendMessage:(NSString *)number number2:(NSString *)number2{
NSLog(@" %@ %@ ", number, number2);
}
这个为自己写的网页内容

3314D8C6-8CEB-42B6-88D0-8BC859754478.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OC调用JS 首先我们创建一个WebView,加载一个本地的HTML文件 在webview加载完成时-(void)...
    45b645c5912e阅读 1,140评论 2 5
  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 3,126评论 1 8
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,721评论 2 7
  • Web与 OC交互总结1,原生方法,通过url传值web代码: function loadURL(url) {va...
    兵兵哥哥阅读 1,106评论 0 0
  • 前言 在iOS开发过程中,一般会有遇到需要和UIWebView交互的需求,即native端和网页端的数据交互,因为...
    wuwy阅读 934评论 0 2