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