iOS 基于javascriptcore封装的 webviewjavascritpbridge
来源:互联网 发布:逃离伊甸园知乎 编辑:程序博客网 时间:2024/04/28 01:03
1.javascriptcore介绍
webkit的组成部分,对js进行解析和提供执行环境。苹果在ios7后推出的oc和javascript互相调用的开源库。
以前ios调用oc 用stringByEvaluatingJavaScriptFromString
JS调用oc,是基于url进行拦截 代表开源库:webviewjavascriptbridge
使用javascriptcore 能够提高oc和js的响应速度,提高性能。
2.javascriptcore 用法
JSContext
一个JSContext 实例代表着一个js运行时环境,js代码都需要在一个context上执行,jscontext负责管理js虚拟机中所有对象的生命周期。
JSValue 代表javascript 原始类型 函数 ,操作javavalue操作javascript ,每个javavalue强引用一个context
JSVirtualMachine
js代码运行的虚拟机,提供javascriptcore执行需要的资源,有自己独立的堆栈,和垃圾回收方式,线程安全,创建不同的jsvirtualmachine虚拟机对象,不同的虚拟机可以并发执行js代码。
objects 调用 js
加载javascript代码
context解析javascript
获取对象和调用方法
var appendString = function(name) { return 'string:' + name; }; var arr = [1, 2 , 'hello world']; //test.m NSString *jsPath = [[NSBundle mainBundle] pathForResource:@"test"ofType:@"js"]; NSString *jsContent = [NSString stringWithContentsOfFile:jsPath encoding:NSUTF8StringEncoding error:nil]; JSContext *context = [[JSContext alloc] init]; [context evaluateScript:jsContent]; JSValue *value = [context[@"appendString"] callWithArguments:@[@"hello"]]; JSValue *value1 = context[@"arr"]; NSLog(@"appendString:%@",[value toString] );//appendString:string:hello NSLog(@"arr:%@",[value1 toArray] );
JS调用oc方法
第一个是Block
JSContext *context = [[JSContext alloc] init]; context[@"sayhi"] = ^(NSString *name) { NSLog(@"say hi to %@",name); }; [context evaluateScript:@"sayhi('Greg')"];
第二个是 实现JSExport协议
//定义需要暴露给js的内容,这里我们只暴露personName和queryPersonName接口
@protocol PersonProtocol <JSExport>@property(nonatomic,copy)NSString *personName;-(NSString *)queryPersonName;@end//Person实现PersonProtocol协议,而自己定义的age和queryPersonAge接口不暴露给js@interface Person : NSObject <PersonProtocol>@property(nonatomic,assign)NSInteger age;-(NSInteger)queryPersonAge;@end@implementation Person@synthesize personName = _personName;-(NSString *)queryPersonName{ return self.personName;}-(NSInteger)queryPersonAge{ return self.age;}@endJSContext *context = [[JSContext alloc] init];//创建Person类的对象,将他赋值给js对象Person *person=[Person new];person.personName = @"Greg";person.age = 27;context[@"person"]=person;//可以调用获取PersonProtocol暴露的内容NSString *personName = [[context evaluateScript:@"person.personName"] toString]; //"Greg"NSString *personName1 = [[context evaluateScript:@"person.queryPersonName()"] toString]; //"Greg"//js无法调用跟age相关的内容NSInteger age = [[context evaluateScript:@"person.age"] toInt32]; // 0NSInteger age1 = [[context evaluateScript:@"person.queryPersonAge()"] toInt32]; /
3.封装
将javascriptcore进行封装,更方便ios 和 前端进行数据的交互和方法的调用,使用方式和webviewjavascriptbridge一样,先在plist文件配置,对外暴露的oc接口需要实现指定的协议。
demo:https://github.com/HZQuan/WebViewJavaScriptCoreBridge
- iOS 基于javascriptcore封装的 webviewjavascritpbridge
- iOS JavaScriptCore
- iOS开发-JavaScriptCore的使用-WebiOS开发
- iOS开发之JavaScriptCore的基本使用
- 基于IOS的sqlite数据库封装
- ios 基于AFN的二次封装
- 基于JavaScriptCore的OC与JS互相调用
- JavaScriptCore and iOS 7
- iOS-javaScriptCore学习笔记
- iOS网页-JavaScriptCore
- iOS 下javascriptcore学习
- JavaScriptCore in iOS
- iOS JavaScriptCore框架 入门
- ios之javascriptCore
- ios上js引擎的使用,javascriptcore和v8
- iOS中OC JavaScriptCore.framework框架的webView交互
- JavaScript :浅谈 iOS 与 H5 的交互- JavaScriptCore 框架
- iOS OC与JS的交互(JavaScriptCore实现)
- 分类的R语言实现
- ABAP 7.4新特性(一):行内定义 Inline Declarations
- 自定义View,有这一篇就够了
- Archetypal Analysis
- java系统高并发解决方案(转载)
- iOS 基于javascriptcore封装的 webviewjavascritpbridge
- java的四种引用
- 最长公共子序列(二)
- 11.2.0.4 启动和关闭
- 书单
- 新版android手机显示mean办法
- java 页面url传值中文编码&解码
- WinDbg配置和使用基础
- cmake相关参数、指令及实例