相信初学javascript的工作于嵌入式系统的人,当然包括我自己,都有一个疑问,如果应用是html/css/javascrip写,而中间件是c/c++写,那么javascript与c/c++中间件API是如何相互调用的呢?通过一段时间的学习,在此做个总结
1.JavaScriptCore与头文件
基于webkit的开发需要包含下面两个头文件:
#include <WebKit.h>
#include <JavaScriptCore/JavaScript.h>
JavaScriptCore API: http://developer.apple.com/library/mac/#documentation/Carbon/Reference/WebKit_JavaScriptCore_Ref/JSObjectRef_h/index.html
2.在c++中创建javascript类
如果你熟悉javascript类,那么你会看到在c++中创建javascript类与在javascript里创建类是基本一样的,除了在c++中需要写成员函数,还可以有一个finalize函数,这个函数在javascript中是没有的。
2.1定义一个javascript类
static JSClassDefinition jsBaseTvDefinition =
{
0, //version
kJSClassAttributeNone, //attributes
"__BaseTvClass", //className
0, //parentClass
0, //staticValues
jsBaseTvFunctions, //staticFunctions
0, //Initialize
finalize, //Finalize
0, //has Property
0, //get Property
0, //set Property
0, //delete Property
0, //getPropertyNames
0, //callAsFunction
0, //hasInstance
0, //callAsConstructor
0 //convertToType
}
这里我定义了一个叫"__BaseTvClass"的类和一个叫finalize的方法(前缀"__"不是必需的,只是为了防止与javascript中定义的类冲突)。在javascript中,它相当于下面这个样子
function __BaseTvClass
{
...
}
2.2定义成员函数
static JSStaticFunction jsBaseTvFunctions[]
{
{"setSource",JSBaseTv::setSource,kJSPropertyAttributeNone},
{"getCurrentSource",JSBaseTv::getCurrentSource,kJSPropertyAttributeNone},
{"startChannelScan",JSBaseTv::startChannelScan,kJSPropertyAttributeNone},
{"