在SpiderMonkey JS Engine中调用回调函数

时间:2012-12-30 17:38:26

标签: javascript spidermonkey

我正在使用SpiderMonkey JS Engine 1.8.5 API。

JS代码如下:

visitChildren(function() {
                             log("something");
                         });

VisitChildren就像:

JSBool visit_children(JSContext* cx, uintN argc, jsval *vp) {

    JSFunction* function;
    if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "f", &function))
        return JS_FALSE;

    jsval retVal;
    JS_CallFunction(cx, JS_GetGlobalObject(cx), function, 0, NULL, &retVal);

    return JS_TRUE;
}

我故意简化代码以使问题更清晰。当然我做的事情绝对错误,有人会建议我为什么要调用* JS_CallFunction *崩溃应用程序?

UPD1:

https://developer.mozilla.org/en-US/docs/SpiderMonkey/JSAPI_Reference/JSFunction找到了一些含糊不清的信息,但仍然崩溃了:

jsval functionVal = OBJECT_TO_JSVAL(JS_GetFunctionObject(function));
JS_CallFunctionValue(cx, JS_GetGlobalObject(cx), functionVal, 0, NULL, &retVal);

1 个答案:

答案 0 :(得分:1)

您想要的是JS_CallFunctionValue [1]。在测试类型(您的JS_ConvertArguments调用)后,忽略转换的结果JSFunction并改为使用实际的jsval。我还没有找到JSFunction的使用方法。