• iOS中js与objective-c的简单交互


     

    1、首先是objective-c调用js中的代码,可以用UIWebview中的一个方法 stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法 的返回值。 比如调用js中方法myFunction(),可以在代码中调用NSString *str = [self.webviewstringByEvaluatingJavaScriptFromString:@"myFunction();"];

    2、js调用objective-c的方法就没那么简单了

    首先在js中声明方法

    <html>
    <head>
    <meta http-equiv="content-type"content="text/html;charset=utf-8">
    <title>js调用oc</title>
    <script type="text/javaScript">
    /* 调用本地带参数的方法 */
    function testFunction1(cmd,parameter1){
    return document.location="objc://"+cmd+":/"+parameter1; //cmd代表objective-c中的的方法名,parameter1自然就是参数了
    }
    /* 调用本地不带参数的方法 */
    function testFunction2(cmd){
    return document.location="objc://"+cmd; //cmd代表objective-c中的的方法名
    }
    </script>
    </head>
    <body>
    <p><button type="text" id="text1" value="点击这里1"onclick="testFunction1('printLog:','str')">调用本地带参数的方法</button></p>
    <p><button type="text" id="text2" value="点击这里2"onclick="testFunction2('testFunc')">调用本地不带参数的方法</button></p>
    </body>
    </html>

     

    再调用webview代理

     

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
    NSString *urlString = [[request URL] absoluteString];
    NSArray *urlComps = [urlStringcomponentsSeparatedByString:@"://"];
    if([urlComps count] && [[urlCompsobjectAtIndex:0] isEqualToString:@"objc"])
    {
    NSArray *arrFucnameAndParameter = [(NSString*)[urlCompsobjectAtIndex:1] componentsSeparatedByString:@":/"];
    NSString *funcStr = [arrFucnameAndParameterobjectAtIndex:0];
    if (1 == [arrFucnameAndParametercount])
    {
    // 没有参数
    if([funcStr isEqualToString:@"testFunc"])
    {
    /*调用本地函数*/
    [self testFunc];
    }
    }
    else if(2 == [arrFucnameAndParametercount])
    {
    //有参数的
    if([funcStr isEqualToString:@"printLog:"] && [arrFucnameAndParameterobjectAtIndex:1])
    {
    /*调用本地函数*/
    [self printLog:@"js调用本地带参数的方法成功!"];
    }
    }
    return NO;
    };
    return YES;
    }

    - (void)printLog:(NSString *)str
    {
    NSLog(@"%@", str);
    }

    - (void)testFunc
    {
    NSLog(@"js调用本地不带参数的方法成功!");
    }

  • 相关阅读:
    vue 数字滚动的插件 vue-count-to
    ASP.NET Core EF 查询获取导航属性值,使用Include封装
    nginx在asp.net mvc项目中 配置 初步快速入门
    JQuery EasyUI 扩展方法 日期控件 设置时间段函数
    JQueryEasyUI easyui-combobox 单击文本区域显示下拉菜单
    Jquery Easy UI Datagrid 上下移动批量保存数据
    ASP.NET MVC BundleConfig介绍和使用
    ASP.NET MVC5 视图相关学习
    SqlDependency数据库同步+signalr 推送消息
    T4 模板自动生成带注释的实体类文件
  • 原文地址:https://www.cnblogs.com/niexiaobo/p/4939290.html
Copyright © 2020-2023  润新知