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的调用
主要是通过利用苹果系统框架<JavaScriptCore/JavaScriptCore.h>
嗯在执行js方法时如果传的参数带有换行好像会引起错误,大家注意一下。

1.JSContext的block方式:
      

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

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

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

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

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

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

@interface JSObj()<JSExport>

@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)
嗯,差不多就这样了。第一篇博文,多很多不足的地方多多包涵。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 随着中秋国庆的到来,公司的运营要搞一系列活动,这就需要服务端提供数据支持,iOS、Android要提供相应的入口及...
    伍骁辛阅读 4,335评论 1 40
  • JS 与 OC 的交互原来没有好好研究过,用的都是比较简单拦截 Url 的方式,通过定义专用的 Url 来拦截关键...
    _南山忆阅读 4,170评论 12 54
  • 一、说明 这篇文章记录自己在研究OC与JS交互中的所得,以及遇到的问题与解决 由于苹果的审核时间太漫长,一次审核不...
    xukunluren阅读 877评论 1 7
  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 3,109评论 1 8
  • 你眼神里有光仿佛存放着一整个夏天的臂膀仿佛记录着一整个秋天的气爽 有火烧云的绚烂有田野的金黄有波澜的河流也有炊烟的...
    没头脑和不高阅读 310评论 0 2