ios 与 js交互一点心得

来源:互联网 发布:河南自考网络助学平台 编辑:程序博客网 时间:2024/06/08 13:34

我用的是苹果原生的--------->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

3 0