超简单的JS调用OC方法

      JavaScript语言调用Objective-C语言,并没有现成的API,但是有些方法可以达到相应的效果。具体是利用UIWebView的特性:在UIWebView的内发起的所有网络请求,都可以通过delegate函数得到通知。

       html放进远程服务器里面,进行访问,本文放在本地,便于观察,其body部分代码简写如下:

    先来看OC代码,首先创建视图控制器,在WebViewController.h文件里面,导入系统库JavaScriptCore/JavaScriptCore.h

@protocolJSObjcDelegate

//调用的JavaScript方法,必须声明!!!

- (void)method;//不需传参

- (void)postMethod:(NSString*)string;//需要传参

@end

@interfaceViewController :UIViewController

@property(strong,nonatomic)UIWebView*webView;

@property(nonatomic,strong)JSContext*jsContext;

        在.m文件里面,代码如下

- (void)viewDidLoad {

       [superviewDidLoad];

       self.webView= [[UIWebViewalloc]initWithFrame:CGRectMake(0,20,            [UIScreenmainScreen].bounds.size.width, [UIScreenmainScreen].bounds.size.height)];

       self.webView.delegate=self;

        //从本地加载html文件

         NSString* path = [[NSBundlemainBundle]pathForResource:@"index"ofType:@"html"];

         NSURL* url = [NSURLfileURLWithPath:path];

          NSURLRequest* request = [NSURLRequestrequestWithURL:url] ;

          [self.webViewloadRequest:request];

          [self.viewaddSubview:self.webView];

}

- (void)webViewDidFinishLoad:(UIWebView*)webView {

   //设置javaScriptContext上下文

       self.jsContext= [webViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

      self.jsContext[@"JSandOC"] =self;

      self.jsContext.exceptionHandler= ^(JSContext*context,JSValue*exceptionValue) {

context.exception= exceptionValue;

NSLog(@"异常信息:%@", exceptionValue);

};

}

- (void)method{

     NSLog(@"方法一");

}

- (void)postMethod:(NSString*)string{

   NSLog(@"方法二Get:%@", string);

}

        这样就OK了,JS调用OC里面的method、postMethod方法。

你可能感兴趣的:(超简单的JS调用OC方法)