我用的是苹果原生的--------->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是我自己写的一个数据库存储类