iOS开发OC与JS交互

一、JS调用OC原生

1、引入库以及头文件

2、为方便操作,加载本地html

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

[self.webView loadRequest:request];

3、在test.html中添加一个按钮

给test.html的按钮添加一个打印的事件

function btnAction()

{

print('传入参数1','传入参数2');

}

4、在webViewDidFinishLoad方法中实现JS调用OC的方法

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

//定义一个上下文对象    JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

//定义好JS要调用的方法, print就是调用的print方法名

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

//在上下文对象中,取出要调用的JS方法

NSArray *args = [JSContext currentArguments];

//在主线程对UI操作

dispatch_async(dispatch_get_main_queue(), ^{

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式一"

message:@"这是JS调用OC原生的弹出窗" delegate:self

cancelButtonTitle:@"收到" otherButtonTitles:nil];

[alertView show];

});

for (JSValue *jsVal in args) {

NSLog(@"%@", jsVal.toString);  //打印结果是:JS传入参数1  JS传入参数2

}

}

二、OC原生调用JS

1.在html中定义一个要被OC调用的JS方法

2.在webViewDidFinishLoad方法中实现OC调用JS的方法

[context evaluateScript:@"abc()"];

最后附上代码的两张图(想要demo的私信我发给你)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 随着H5技术的兴起,在iOS开发过程中,难免会遇到原生应用需要和H5页面交互的问题。其中会涉及方法调用及参数传值等...
    Chris_js阅读 3,109评论 1 8
  • OC与JS交互之JavaScriptCore 本文摘抄自:https://hjgitbook.gitbooks.i...
    大冲哥阅读 1,043评论 0 1
  • JavaScriptCore框架主要是用来实现iOS与H5的交互。由于现在混合编程越来越多,H5的相对讲多,所以研...
    水灵芳蕥阅读 1,431评论 1 8
  • 跟原生开发相比,H5的开发相对来一个成熟的框架和团队来讲在开发速度和开发效率上有着比原生很大的优势,至少不用等待审...
    大冲哥阅读 1,859评论 0 7
  • 今早,我在同学群里转发了一则微信,说的还是“垃圾人”的老话题,文中,作者建议大家“远离垃圾人”。 于是,讨论开始了...
    鸡蛋西红柿阅读 2,062评论 0 0