• ios-UIWebView中js和oc代码的互调


    webview是ios中显示远程数据的网页控件,webview能显示的内容很多,MP4、文本、pdf等等;

    关于js和oc代码的互相调用

    1:oc中调用js代码;

    >>oc中调用js代码很简单,一个方法:stringByEvaluatingJavaScriptFromString:@“”;

    >>要执行的js代码方法到字符串中就可以了;

    2:js中执行oc的某段代码;

    >>js中执行oc的代码要通过一个桥梁:

      者桥梁就是webview的一个代理方法:(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request

      navigationType:(UIWebViewNavigationType)navigationType

      这个方法会在webview发送某个请求时调用,并且把request传了进来;返回YES, 可以加载这个请求, 返回NO, 代表禁止加载这个请求;

    >>代码实现案例:在webview中通过js代码来打开手机的照相机

      js代码:

    function openCamera()
    {
          window.location.href = 'iOS://openCamera';
          // 这段代码想要调用oc中的openCamera这个方法来打开相机
          // window.location.href这个方法会重新发送请求  这个请求会通过webview的代理方法传给oc
          // iOS:// 是定义的协议头,oc拿到请求的字符串后,看到这个协议头就拦截,执行后边的方法,这个协议头是自己指定的;
    }

      oc的webview代理方法代码:

    /**
     当webView发送一个请求之前都会调用这个方法, 返回YES, 可以加载这个请求, 返回NO, 代表禁止加载这个请求
     */
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
        NSString *url = request.URL.absoluteString;
        NSRange range = [url rangeOfString:@"ios://"];
        if (range.length != 0) {
            
            // 截取方法名
            NSString *method = [url substringFromIndex:range.location + range.length];
            // 将方法名(字符串)转为SEL类型执行
            SEL selector = NSSelectorFromString(method);
            [self performSelector:selector withObject:nil];
        }
        return YES;
    }

      总结:js中执行oc的代码的重要桥梁:webview的代理方法,也就是上边的方法;执行的方法在字符串中,oc拿到请求的字符串通过截取协议头后边的字符串得到要执行的方法的方法名;最后把截取得到的字符串转为方法执行;

  • 相关阅读:
    c++中memset()函数的用法
    not exits用法讲解(以查询选修全部课程的学生为例)
    数据库中冲突可串行化的判断
    如何快速的判断一个数是否是完全平方数
    杭电oj2089c++
    3月7日学习日志
    3月5日 学习日志
    免编译二进制安装mysql5.7
    base64转换为图片以及图片转换为base64码
    Eclipse编辑JS响应慢,复制粘贴卡顿的解决方案
  • 原文地址:https://www.cnblogs.com/cxbblog/p/3821410.html
Copyright © 2020-2023  润新知