您的位置:首页 > Web前端 > JavaScript

Mac10.9和iOS7新公开的框架JavaScriptCore.framework

2013-12-01 01:22 441 查看
官网的介绍

The JavaScript Core framework (
JavaScriptCore.framework
) provides Objective-C wrapper classes for many standard
JavaScript objects. Use this framework to evaluate JavaScript code and parse JSON data. For information about the classes of this framework, see the header files.

网上的翻译是:提供了用Objective-C封装的大量标准JavaScript对象。通过该framework可以对JavaScript代码进行评估(evaluate),以及解析JSON。

实际也就是开放一个JavaScript的运行环境,供执行js代码。一些数据处理和运算不必再转成Objective-C来写,Apple帮忙搞定,每个JavaScript的对象都可以用C和Objective-C的类来访问。

目前还没有详细的文档描述接口的使用,但可以直接看代码头文件先睹为快。

在xcode5工程中导入JavaScriptCore.framework,





可以查看到其公开的头文件,里面就是新的API了。



这些文件里的信息会有帮助:

JSBase.h:声明了使用js的基本C函数:JSEvaluateScript执行,JSCheckScriptSyntax检查语法,JSGarbageCollect垃圾收集,都需要传入JSContextRef参数。
JSContext.h和JSContextRef.h:前者是Objective-C的接口,后者是C的接口,是JavaScript运行上下文的表示。
JSManagedValue.h、JSObjectRef.h、JSStringRef.h、JSStringRefCF.h、JSValue.h、JSValueRef.h:都是对javascript对象的C/Objective-C表示,提供不同语言的接口来访问和操作js对象。

[cpp] view
plaincopy

//   Objective-C type  |   JavaScript type  

// --------------------+---------------------  

//         nil         |     undefined  

//        NSNull       |        null  

//       NSString      |       string  

//       NSNumber      |   number, boolean  

//     NSDictionary    |   Object object  

//       NSArray       |    Array object  

//        NSDate       |     Date object  

//       NSBlock *     |   Function object *  

//          id **      |   Wrapper object **  

//        Class ***    | Constructor object ***  

JSVirtualMachine.h:js虚拟机的表示,可以自己管理对象引用。object graphs的概念可参考http://howtonode.org/object-graphs

JavaScriptCore.framework是开源WebKit的一部分,从WWDC的介绍来看,Apple对Safari和WebKit做了很多优化和升级,看来这些开放的接口也是优化升级的一部分成果。Apple对开发者开放的WebKit接口通常都是Mac公开的多,iOS公开的少。这次也公开JavaScriptCore.framework这些新接口到iOS上,应该会是很给力的升级了。

因为还没有文档教怎么使用新框架,还需继续折腾尝试,最快的方法是直接查看最新的Mac WebKit源码是怎么应用这些API的。

例如:

[cpp] view
plaincopy

static void* runJavaScriptThread(void* arg)  

{  

    JSGlobalContextRef ctx = JSGlobalContextCreate(0);  

    JSStringRef scriptRef = JSStringCreateWithUTF8CString("'Hello World!'");  

  

    JSValueRef exception = 0;  

    JSEvaluateScript(ctx, scriptRef, 0, 0, 1, &exception);  

    ASSERT(!exception);  

  

    JSGlobalContextRelease(ctx);  

    JSStringRelease(scriptRef);  

      

    return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: