美文网首页
iOS中JS和OC相互调用实现混合开发(JavaScriptCo

iOS中JS和OC相互调用实现混合开发(JavaScriptCo

作者: 傲世情缘 | 来源:发表于2016-12-22 17:49 被阅读0次

    目前JS调用OC主要分为两种情况

    1.JS里面直接调用方法;

    2.JS里通过对象调用方法;

    方式1:JS里面直接调用方法(使用block),该方式开发中一般不采用,故简单代过

    //网页加载完成调用此方法

    -(void)webViewDidFinishLoad:(UIWebView*)webView

    {

           //iOS调用JS ,首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)

          JSContext*context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

          //js调用iOS

          //第一种情况

          //其中test1就是js的方法名称,赋给是一个block 里面是iOS代码

         //此方法最终将打印出所有接收到的参数,js参数是不固定的 我们测试一下就知道

         context[@"test1"] = ^() {

         NSArray*args = [JSContextcurrentArguments];

         for(id obj in args) {

         NSLog(@"%@",obj);

         }

    };

             //首先准备一下js代码,来调用js的函数test1 然后执行

            //一个参数

             NSString*jsFunctStr=@"test1('参数1')";

            [contextevaluateScript:jsFunctStr];

            //二个参数

           NSString*jsFunctStr1=@"test1('参数a','参数b')";

           [contextevaluateScript:jsFunctStr1];

    }

    方式2:JS里通过对象调用方法

    新建IOSBridge继承自NSObject,然后导入JS交互类库头文件#import<JavaScriptCore/JavaScriptCore.h>

    (1).首先创建一个实现了JSExport协议的协议

    @protocol IOSBridgeProtocol

    -(NSString*)getData:(NSString*)params;

    -(NSString*)doAction:(NSString*)params;

    @end

    (2).定义代理属性

    @property(nonatomic, weak) id delegate;

    (3).在IOSBridge.m文件中实现方法

    -(NSString*)getData:(NSString*)params

    {

          TTLog(@"调用了getData--- %@",params);

           return @"黄文涛";

    }

    -(NSString*)doAction:(NSString*)params

    {

         TTLog(@"调用了doAction--- %@",params);  

          return @"黄文涛";

    }

    (4).如何使用

    导入#import"IOSBridge.h"

    然后,定义私有属性

    @property(nonatomic, strong) JSContext*context;

    获取JSContext

    _context= [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    IOSBridge*iOSBridge = [[IOSBridge alloc] init];

    self.context[@"IOSBridge"] = iOSBridge;

    ok ,两种方式都完成了,欢迎交流指正, 本人QQ:1334627194

    相关文章

      网友评论

          本文标题:iOS中JS和OC相互调用实现混合开发(JavaScriptCo

          本文链接:https://www.haomeiwen.com/subject/jalhvttx.html