JavaScriptCore框架允许您从一个基于Objective-C或C程序评估JavaScript程序。它还允许您插入自定义对象JavaScript环境。
类
NSObject: NSObject是大多数Objective-C类层次结构的根类。
JSContext: 继承NSObject,JSContext对象代表一个JavaScript执行环境。
JSManagedValue: 继承NSObject,JSManagedValue对象封装JSValue对象,添加“条件保留”行为提供自动内存管理的值。
JSValue: 继承NSObject,JSValue实例参考JavaScript的值。
JSVirtualMachine实例:继承NSObject,JSVirtualMachine实例代表一个独立的JavaScript的执行环境。
协议
JSExport协议提供了一种声明式的方式输出Objective-C实例类及其实例方法、类方法和JavaScript代码。
其他参考
1、参考JSBase.h
2、参考JSContextRef.h
3、参考JSObjectRef.h
4、参考JSStringRef.h
5、参考JSStringCF.h
6、参考JSValueRef.h
JSContext
一个JSContext对象代表一个JavaScript执行环境。你创建和使用JavaScript环境评估JavaScript脚本从Objective-C或Swift 代码,访问中定义值或计算在JavaScript中,并使本地对象、方法或访问的JavaScript函数。
创建JavaScript环境
/*!
@method
@abstract 创建一个 JSContext.
@result一个新的JavaScript环境.(可用iOS7.0及之后)
*/
- (instancetype)init;
/*!
@method
@abstract在指定的虚拟机创建一个JSContext.
@param virtualMachine 虚拟机与它们相关联的新环境.
@result 一个新的JavaScript环境.(可用iOS7.0及之后)
*/
- (instancetype)initWithVirtualMachine:(JSVirtualMachine *)virtualMachine;
评估脚本
/*!
@methodgroup 评估脚本
*/
/*!
@method
@abstract 评估一系列的JavaScript代码.
@param script 用一个字符串包含JavaScript代码来评估.
@result 最后一个值生成脚本.(可用iOS7及之后)
*/
- (JSValue *)evaluateScript:(NSString *)script;
/*!
@method
@abstract评估一个字符串的JavaScript代码和脚本的源文件的URL.
@param script 用一个字符串包含JavaScript代码类评估.
@param sourceURL 脚本的源文件的URL。使用调试器和报告时异常。这些参数只是信息:它不改变行为脚本。
@result 最后一个值生成脚本.(可用iOS8及之后)
*/
- (JSValue *)evaluateScript:(NSString *)script withSourceURL:(NSURL *)sourceURL NS_AVAILABLE(10_10, 8_0);
在运行环境中检查回调状态
/*!
@method
@abstract 得到当前的JSContext执行环境.
@discussion
@result 当前执行JSContext或如果不存在,nil.(可用iOS7及之后)
*/
+ (JSContext *)currentContext;
/*!
@method
@abstract 得到当前执行的JavaScript函数.
@result 当前执行JScontext或如果不存在,nil.
*/
+ (JSValue *)currentCallee NS_AVAILABLE(10_10, 8_0);
/*!
@method
@abstract 得到这个<code></code>当前执行方法的值。
@result 当前这个<code></code> 的值 or 如果不存在,nil.
*/
+ (JSValue *)currentThis;
/*!
@method
@abstract 得到当前的参数回调函数.
@result 当前参数数组 如果不存在当前回调,nil。
*/
+ (NSArray *)currentArguments;
访问JavaScript全局状态的子脚本
/*!
method
@abstract 得到全局对象上的一个特定属性
@param key
@result JSValue全局对象的属性
*/
- (JSValue *)objectForKeyedSubscript:(id)key;
/*!
method
@abstract 设置全局对象一个特定的属性
@param object
@param key
*/
- (void)setObject:(id)object forKeyedSubscript:(NSObject <NSCopying> *)key;
使用JavaScript全局状态
/*!
@property
@abstract 获得全局对象的上下文
@result 全局对象.
*/
@property (readonly, strong) JSValue *globalObject;
@property
*/
@property (strong) JSValue *exception;
/*!
@property
@property (copy) void(^exceptionHandler)(JSContext *context, JSValue *exception);
/*!
@property
@discussion 所有实例JScontext与单个JSVirtualMachine相关联。
*/
@property (readonly, strong) JSVirtualMachine *virtualMachine;
/*!
@property
@discussion JSContext的名称。当远程调试环境暴露.
*/
@property (copy) NSString *name NS_AVAILABLE(10_10, 8_0);
使用C JavaScriptCore API
/*!
@property
@abstract 获得JSContext得到C API与包装.
@result 这个JSContext相当于C API
*/
@property (readonly) JSGlobalContextRef JSGlobalContextRef;
/*!
@method
@abstract 创建一个JSContext,封装它的C API
@param jsGlobalContextRef
@result JSContext等价于提供JSGlobalContextRef
*/
+ (JSContext *)contextWithJSGlobalContextRef:(JSGlobalContextRef)jsGlobalContextRef;
故事还没结束!