ios 与 js交互一点心得

我用的是苹果原生的--------->JavaScriptCore.framework。

首先要导入这个库,老司机都知道怎么导入的就不介绍了。

第二创建一个类 JavaScriptObject(我自己起的名字,你可以随意起)继承于NSObject, 遵守JavaScriptObjectExport(我自己起的名字,你可以随意起)协议。

JavaScriptObjectExport协议需要自己去创建,该协议继承于 JSExport,

JavaScriptObjectExport负责声明和js同名的方法,一定要同名否则不调用;

JavaScriptObject负责实现具体的操作。

在WebView的代理方法里面实现(别忘了导入头文件#import <JavaScriptCore/JavaScriptCore.h>):

JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    javaScriptObj = [[JavaScriptObject alloc] init];
    javaScriptObj.javaScriptObjViewC = self;
    javaScriptObj.javaScriptObjWebView = webView;
    context[@"iOS"] = javaScriptObj;(iOS 是iOS与js规定好的,相当于一个对象)

就可以交互了。

例(有返回值的):

js代码

function get_app_version() {
    iOS.get_app_version();
}

iOS代码 在JavaScriptObjectExport 声明 - (NSString *)get_app_version; // 获取应用版本号

JavaScriptObject 实现

- (NSString *)get_app_version{
    NSString *bundleStr = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
    NSString *returnBundleStr = [NSString stringWithFormat:@"ios_%@",bundleStr];
    return returnBundleStr;
}

例(js带参数的):

js代码

function db_insert() {       
iOS.db_insert("wq 1028 key","1028 value");   
}

iOS代码 在JavaScriptObjectExport 声明 - (void)db_insert:(NSString *)name :(NSString *)value; // 插入数据

- (void)db_insert:(NSString *)name :(NSString *)value
    [DatabaseOperations deleteDataWithName:name];
    [DatabaseOperations insertDataWithName:name withValue:value];
}

ps:DatabaseOperations是我自己写的一个数据库存储类

demo下载地址:  https://github.com/SiGuozhu/iOSWithJsInteraction

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值