zoukankan      html  css  js  c++  java
  • 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拿到请求的字符串通过截取协议头后边的字符串得到要执行的方法的方法名;最后把截取得到的字符串转为方法执行;

  • 相关阅读:
    RIA Animation test.
    深入浅出REST
    HTTP header中的 Cachecontrol
    Silverlight操纵html元素
    Comparing Azure storage and SQL Data Services
    SharePoint 2010 集成Window Live 认证遇到的问题 part 2
    SharePoint2010 此工作簿未存储在 Excel Services 应用程序 中受信任的位置,因此无法打开。
    SharePoint2010 使用Designer开发工作流 如何引用其他列表的查阅项
    SharePoint 2010 item级的权限控制
    Infopath 2010 如何设计虚线底框应用于合同中的输入框
  • 原文地址:https://www.cnblogs.com/cxbblog/p/3821410.html
Copyright © 2011-2022 走看看