3

我正在使用 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 返回对象的替代方案,只要我能得到我期望的数值。

4

1 回答 1

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);
于 2013-01-02T13:11:08.910 回答