JavaScript 引擎 SpiderMonkey

JavaScript 引擎 SpiderMonkey

SpiderMonkey, Mozilla项目的一部分, 是一个执行JavaScript脚本的引擎.它用 C 实现。还有一个叫做 RhinoJava版本。此外.Net下也有SpiderMonkeyDotNet,不过目前还不太成熟。

TAG: Javascript  Spider  SpiderMonkey  Mozilla  JSAPI  

 

SpiderMonkey, 是 Mozilla 项目的一部分, 是一个执行JavaScript脚本的引擎. 它用 C 实现。还有一个叫做 Rhino的Java版本。此外.Net 下也有 SpiderMonkeyDotNet,不过目前还不太成熟。

我记得我以前所在的公司里有一个server tools 开发组,他们做的事情其实就是调用一个 javascript 引擎,将一些对象封装,然后让测试人员可以写 server test 脚本来进行服务端功能的测试。

其实微软也有一个 Javascript 引擎 ActiveX 组件 Microsoft Script Control 1.0,使用起来更加简单方便,有兴趣的可以自己到网上搜索相关的资料。

具体的介绍就不再多说了,网上有不少资料:

官方网站: 
http://www.mozilla.org/js/spidermonkey/

看这两篇基本上够了:

功能强大的JavaScript引擎--SpiderMonkey [自由、创新、研究、探索……]
http://www.cnblogs.com/shanyou/archive/2006/10/11/526777.html

使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎 [颓废到底]
http://hi.baidu.com/kuien_jiang/blog/item/7e2cfcddea6be9df8c102956.html

官方的用户指南,网上的文章大部分也是根据这个来的:
https://developer.mozilla.org/en/JavaScript_C_Engine_Embedder%27s_Guide

其实我觉得这个最清楚明了,有空的话我准备把他翻译一下: 
JSAPI Phrasebook 
https://developer.mozilla.org/En/SpiderMonkey/JSAPI_Phrasebook

我这次做的一个简单的应用,我是想用 javascript prototype 中的 toJSON 功能将字符串转换为 JSON 格式,虽然C++中也有一些 JSON的解决方案,不过用起来都不爽,刚开始 JS_CompileFile 怎么也通不过,后来搞清楚原来是 prototype中使用了很多网页上的对象,document, window之类,这些在普通应用程序中当然没有了,后来我把 prototype改了一下,之留下来那些跟toJSON 有关的东西就OK 了,附上代码:

1.  void  ConvertBufferToJson( char  *buf)   

2.  {   

3.      uint32 max_gc_size = (8L * 1024L * 1024L);    

4.       size_t  stack_chunk_size = (8192);    

5.   

6.      JSRuntime *rt;   

7.      JSContext *cx;   

8.      JSObject *globalObj;   

9.      JSClass global_class = {   

10.              "global" ,0,   

11.             JS_PropertyStub, JS_PropertyStub,JS_PropertyStub, JS_PropertyStub,   

12.             JS_EnumerateStub, JS_ResolveStub,JS_ConvertStub, JS_FinalizeStub };   

13.  

14.      /* 初始化JS RunTime,返回结果给rt */   

15.     rt = JS_NewRuntime(max_gc_size);    

16.      if  (!rt)  return ;   

17.        

18.      /* 创建一个上下文,并将其与JS RunTime关联起来 */   

19.     cx = JS_NewContext(rt, stack_chunk_size);    

20.      if  (!cx)  return ;   

21.  

22.      /* 创建全局对象 */   

23.      if  (!(globalObj = JS_NewObject (cx, &global_class, NULL, NULL)))  return ;   

24.      /* 实例化内置对象和全局对象*/   

25.     JS_InitStandardClasses (cx, globalObj);   

26.        

27.      /*执行一段脚本*/   

28.     JSScript* jScript = JS_CompileFile(cx, globalObj,  "prototype.js" );   

29.  

30.      //JSObject* scriptobj = JS_NewScriptObject(cx, jScript);  

31.      //JS_AddNamedRoot(cx, &scriptobj, "sy_script");  

32.  

33.     jsval rval = JSVAL_FALSE;   

34.     JSBool ok = JS_ExecuteScript(cx, globalObj, jScript, &rval);   

35.  

36.     rval = JSVAL_FALSE;   

37.     jsval argvs[1];   

38.     argvs[0] = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, buf));   

39.  

40.     ok = JS_CallFunctionName(cx, JS_GetGlobalObject(cx),  "GetJsonValue" , 1, argvs, &rval);   

41.  

42.     JSString *retstr = JS_ValueToString(cx, rval);   

43.     strcpy(buf, JS_GetStringBytes(retstr));   

44.  

45.      /*释放上下文*/   

46.     JS_DestroyContext(cx);   

47.      /*释放RunTime*/   

48.     JS_DestroyRuntime(rt);   

49. }   

 

(jh_zzz)

本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200912/8137.html]

·        上一篇:ATL实现定制的 IE浏览器栏、工具栏和桌面工具栏3

·        下一篇:搜索引擎原理读书笔记

 

相关文章

·  spider简单的爬虫程序

·  防止某些坏爬虫访问你的服务器

·  搜索引擎原理读书笔记

·  网络爬虫详解

·  再来说说搜索引擎的Spider

·  简单说说搜索引擎中Spider的设计分析

·  Spider的实现细节

推荐内容

网络蜘蛛或爬虫需要能够下载网页、图片(流)以及登录的Cookies等信息,以下的C#代码...

spider简单的爬虫程序...

一个搜索引擎的模型,从理论上讲,具备上述条件的实体和google没有什么本质上的区别。...

Win32 API 支持抢先式多线程网络,这是编写MFC网络蜘蛛非常有用的地方。SPIDER工程(...

URL的组织和管理考虑到系统自身的资源和时间有限,Spider程序应尽可能的对链接进行筛...

比较两个字符串的相似程度问题,根据比较的标准常用的可以分为两个子问题:类似与DNA...

热点内容

 

 


本站文章除注明转载外,均为本站原创、整理或编译.所有文章欢迎任何形式的转载,但请注明作者及出处,尊重他人劳动成果!
若您对转载的文章(作者、来源、版权)有任何疑问,请告知,一定即时处理(abuse{at}rosoo.net)。
Some Rights Reserved 1998 - 2006 Rosoo.Net
Except where otherwise noted, content on this site is
licensed base a Creative Commons Attribution 2.5 License

流媒体开发 QQ群1:8655372
流媒体开发 QQ群2:117013601

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值