美文网首页
UIWebView JS调用OC方法

UIWebView JS调用OC方法

作者: 青椒辣不辣 | 来源:发表于2019-10-25 14:35 被阅读0次

    JavaScriptCore是iOS7中新加入的框架,苹果官方提供的JSContext可以实现Objective-C和JavaScript代码的交互。

    1 OC需要知道JS方法名

    -(void)webViewDidFinishLoad:(UIWebView *)webView{
        //1 获取JSContext
        JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        //2 通过JS中的方法名调用Block中OC代码
        context[@"jsMethodName"] = ^{
            NSArray *currentArg = [JSContext currentArguments];
            for (id obj in currentArg) {
                NSLog(@"%@",obj);
            }
        };
        //3 模拟调用jsMethodName,JS参数是不固定的
        NSString *jsMethondAction = @"jsMethodName('小辣椒','18')";
        [context evaluateScript:jsMethondAction];
    }
    

    2 JS需要知道OC的方法名

    凡事添加了JSExport协议的协议,所规定的方法变量等,就会对js开放,我们可以通过js调用到

    #import <Foundation/Foundation.h>
    #import <JavaScriptCore/JavaScriptCore.h>
    
    @protocol JSInvokingMyOCObjectDelegate <JSExport>
    
    -(void)invokingMyOCObjectWith:(NSString *)name Age:(NSString *)age;
    
    @end
    
    @interface JSInvokingMyOCObject : NSObject<JSInvokingMyOCObjectDelegate>
    
    @end
    
    #import "JSInvokingMyOCObject.h"
    
    @implementation JSInvokingMyOCObject
    -(void)invokingMyOCObjectWith:(NSString *)name Age:(NSString *)age{
        NSLog(@"Name->%@;Age->%@",name,age);
    }
    @end
    
    -(void)webViewDidFinishLoad:(UIWebView *)webView{
        //1 获取JSContext
        JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
        //2 告诉JS你的方法名,调用OC方法
        JSInvokingMyOCObject *myObj = [JSInvokingMyOCObject new];
        context[@"windowiOS"]=myObj;//使用window不行
        //3 模拟调用jsMethodName,JS参数是不固定的
        NSString *jsMethondAction = @"windowiOS.invokingMyOCObjectWithAge('小辣椒','18')";
        [context evaluateScript:jsMethondAction];
    }
    

    相关文章

      网友评论

          本文标题:UIWebView JS调用OC方法

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