美文网首页
快速学会Hybrid开发

快速学会Hybrid开发

作者: delims | 来源:发表于2018-08-02 16:28 被阅读0次

初次听到oc与js交互时,你可能会觉得这是一种高深的技术,其实不然,它并不高深,也很好学,oc与js交互还有另外一个很高大上的名字叫 Hybrid开发。

苹果提供了一个JavaScriptCore框架,用于oc与js交互,里面主要有这几个类

  • JSContext:给JavaScript提供运行的上下文环境
  • JSValue:JavaScript和Objective-C数据和方法的桥梁
  • JSManagedValue:管理数据和方法的类
  • JSVirtualMachine:处理线程相关,使用较少
  • JSExport:这是一个协议,如果采用协议的方法交互,自己定义的协议必须遵守此协议

下面我用最少的代码来实现js交互,为的就是让小白快速学会js交互,大神可以略过。。。这几个类不会全部用到,如果你感兴趣,可以看一下官方文档,深入学习。

js与oc交互,就是网页与原生代码互相调用,首先我们创建一个含有js代码的网页js.html,里面有三个按钮,当点击按钮的时调用原生方法。

js.html 源码如下

function buttonClick1(){
    ocObject.buttonClick();
}
function buttonClick2(){
    ocObject.buttonClick2("给我打印这个字符串");
}
function buttonClick3(){
    ocObject.buttonClick3("参数1","参数2","参数3");
}
</script>
<button onclick="buttonClick1()">调无参方法</button>
<br /><br />
<button onclick="buttonClick2()">调1个参方法</button>
<br /><br />
<button onclick="buttonClick3()">调3个参方法</button>

创建一个与js交互的原生类JSClass, 定义一个协议JSClassDelegate继承自协议JSExportJSClassDelegate中定义了js调用的方法,JSClass需遵守该协议才能与js交互。

JSClass.h 源码如下

#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>
@protocol JSClassDelegate <JSExport>
- (void)buttonClick;
- (void)buttonClick2:(NSString *)arg;
- (void)buttonClick3:(NSString *)arg1 :(NSString*)arg2 :(NSString*)arg3;
@end

@interface JSClass : NSObject<JSClassDelegate>
@end

JSClass.m 源码如下

#import "JSClass.h"
@implementation JSClass
- (void)buttonClick{
    NSLog(@"点击了按钮");
}
- (void)buttonClick2:(NSString *)arg{
    NSLog(@"%@",arg);
}
- (void)buttonClick3:(NSString *)arg1 :(NSString *)arg2 :(NSString *)arg3{
    NSLog(@"%@",arg1);
    NSLog(@"%@",arg2);
    NSLog(@"%@",arg3);
}
@end

了html页面JSClass,下面就可以将它们绑定起来了。
直接上代码

#import "ViewController.h"
#import "JSClass.h"

@interface ViewController ()<UIWebViewDelegate>
@property (nonatomic,weak) UIWebView *webView;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *path = [[NSBundle mainBundle] pathForResource:@"js" ofType:@"html"];
    NSString *content = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    if (content.length == 0) return;
    UIWebView *webView  = [[UIWebView alloc] init];
    webView.delegate = self;
    [self.view addSubview:webView];
    self.webView = webView;
    [webView loadHTMLString:content baseURL:nil];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)webViewDidFinishLoad:(UIWebView *)webView{
    //获取js上下文对象
    JSContext *context =[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    //创建与js绑定的原生对象
    JSClass *jsObject = [JSClass new];
    //原生对象传给js
    context[@"ocObject"] = jsObject;
}

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.webView.frame = self.view.bounds;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
@end

我们来运行一下

[站外图片上传中...(image-d3a467-1533198469914)]

有点丑,但是不影响我们调试功能
依次点击三个按钮后打印信息如下

2018-08-02 16:06:03.116370+0800 Hybrid_demo[31435:3830397] 调用了oc的无参方法
2018-08-02 16:06:04.581703+0800 Hybrid_demo[31435:3830397] 给我打印这个字符串
2018-08-02 16:06:05.485736+0800 Hybrid_demo[31435:3830397] 参数1
2018-08-02 16:06:05.486490+0800 Hybrid_demo[31435:3830397] 参数2
2018-08-02 16:06:05.487110+0800 Hybrid_demo[31435:3830397] 参数3

说明js已经成功调用了原生方法,是不是so easy

源码地址:https://github.com/delims/Hybrid_demo.git

欢迎转载,转载请注明原文地址,谢谢~

相关文章

  • 快速学会Hybrid开发

    初次听到oc与js交互时,你可能会觉得这是一种高深的技术,其实不然,它并不高深,也很好学,oc与js交互还有另外一...

  • iOS-Swift快速进入Hybrid开发

    前言: Hybrid(混合)开发在现今的app开发中相当常见,本文的目的是从iOS端引导大家快速进入Hybrid开...

  • HybridApp

    iOS Hybrid 框架 - PhoneGap iOS Hybrid 框架Hybrid App 开发(开篇) ...

  • AppHost1.0 发布

    AppHost:大前端融合下的 Hybrid 开发解决方案 目前移动端开发还处于一个高速发展的阶段,为了应对快速增...

  • Android集成三方浏览器之X5内核

    很多应用开始采用 hybrid 开发模式,最近在做有关 webrtc 视频通讯的项目,也是使用 hybrid 开发...

  • Framework7+Vue+Flask开发实战 - PT保种管

    参考:PhoneGap Hybrid APP 开发实战(3):用户登录 鉴权PhoneGap Hybrid APP...

  • hybrid和h5

    使用场景 hybrid:产品稳定功能,体验要求高,迭代频繁适合产品型 优点:体验好,可快速迭代 缺点:开发成本高,...

  • HyBrid

    来源于:app混合开发的原理与性能 来源于:Hybrid app原理比较 来源于:Hybrid APP混合开发的一...

  • Enhance Cognition to ReactNative

    用途 原理 和web app、hybrid开发、native开发的优劣 JavaScriptCore 开发IDE ...

  • hybrid app开发工具

    1、AppCan AppCan是国内Hybrid App混合模式开发的倡导者,AppCan应用引擎支持Hybrid...

网友评论

      本文标题:快速学会Hybrid开发

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