从WebKit / JavaScriptCore中的Javascript获取返回值

时间:2012-04-27 06:01:18

标签: javascript webkit javascriptcore

我正在使用JavaScriptCore API来获取Javascript的全局上下文。我希望能够操纵我从C中的Javascript返回的值。这是我有相关的代码示例:

JSGlobalContextRef jsContext = webkit_web_frame_get_global_context(webkit_web_view_get_main_frame(webView));

JSStringRef script = JSStringCreateWithUTF8CString("ReturnOne()");

JSValueRef val = JSEvaluateScript(jsContext, script, NULL, NULL, 0, NULL);

return JSValueToNumber(jsContext, val, NULL);

ReturnOne()是一个JavaScript函数,如下所示:

function ReturnOne() {
  return 1;
}

当我在函数中发出警报时,它会显示,所以我知道正在正确调用该函数。我试图简单地打印出数字1,但我得到一个很大的负值。我没有正确解释JSValueToNumber吗?

任何建议都将不胜感激。感谢。

编辑:我已经做了一些挖掘并发现了这个宝石 - https://lists.webkit.org/pipermail/webkit-help/2011-January/001849.html

不幸的是,我得到了以这种方式实现我的C代码的相同结果。我在Javascript中的函数返回一个原语,我想将该Javascript原语转换为我期待的值(在这种情况下为1)。

我也可以选择从Javascript返回一个对象,只要我能得到我期望的数值。

1 个答案:

答案 0 :(得分:0)

好像没关系。但也许你应该放;到ReturnOne()结束。

也许你应该将返回值转换为int。因为,它返回double,你的print函数接受int值。

我不尝试,但它应该看起来像,

JSStringRef script = JSStringCreateWithUTF8CString("ReturnOne();");
JSValueRef val = JSEvaluateScript(jsContext, script, NULL, NULL, 0, NULL);
return (int)JSValueToNumber(jsContext, val, NULL);