OC与js的交互

js与oc的交互分别由两种

一.oc对js的调用:

1.我们通过UIWebView自带的一个方法stringByEvaluatingJavaScriptFromString:
调用JavaScript代码就可以实现调用我们网页上的方法了
[webView stringByEvaluatingJavaScriptFromString:@"alert('测试')"];
具体可以参考http://www.jianshu.com/p/786a897694c1

2.其次就是通过JavaScriptCore.framework来进行对网页js的操作

//创建JSContext对象,(此处通过当前webView的键获取到jscontext)
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

//OC调用JS方法---test1是js里的方法 这例我们就可以调用网页上js的方法了
[context evaluateScript:@"test1()"];```

####  二.js对oc的调用
主要是通过利用苹果系统框架
嗯在执行js方法时如果传的参数带有换行好像会引起错误,大家注意一下。

1.JSContext的block方式:
      

//首先我们需要拿到WebView执行JS的执行环境,很重要的东西
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

//这是交互方法
context[@"jsmethod"] = ^(){
NSLog(@"你要做的事");
};
//js只需要调用方法 jsmethod(); 就可以实现我们block里面的内容了

2.JSExport协议方式---类方式
我们需要先 ----在.h文件里自定义协议,并且协议遵守协议并且定义协议方法(就是JS调用的OC方法)

@protocol JSExport
// 这里需要注意js调用时需要换一个写法:如下
// iosshare.textJSExportWithParameterTwoParameter('parameter1', 'parameter2');

  • (void)textJSExportWithParameter:(NSString *)parameter1 TwoParameter:(NSString *)parameter2;
    @end

在.m文件中你需要让他去遵守这个协议,实现他的协议方法

@interface JSObj()

@end

@implementation JSObj

  • (void)textJSExportWithParameter:(NSString *)parameter1 TwoParameter:(NSString *)parameter2{
    NSLog(@"你要做的事");
    }

类创建完了当然应该去建立联系,
我们需要在VC中去调用他

//创建context
JSContext *context=[_webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// 建立联系
JSObj *testJO=[JSObj new];
context[@"ios_js"] = testJO;

// 然后就是js对他的调用了--这里就不帖后台代码了,直接用oc调用js的方法调用
[self.context evaluateScript:@"ios_js.textJSExportWithParameterTwoParameter('parameter1','parameter2');"];

这样就可以实现了。
之前我们公司的应用都是通过拦截url进行各种操作的,如果不是查找了些资料都不知道现在都不用这方法了,这里就不提拦截url的方法了。


1.需要注意就是如果你需要对界面进行什么操作的话要加载主线程,不然是会crash的。
2.关于调用JSContext之后的一些内存问题,看了一些文章也不是很懂,如果有了解一些的小伙伴多多交流啊。可以参考这篇-[快点我](http://www.jianshu.com/p/a329cd4a67ee)
嗯,差不多就这样了。第一篇博文,多很多不足的地方多多包涵。

你可能感兴趣的:(OC与js的交互)