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

Getting return value from Javascript in WebKit / JavaScriptCore

本文关键字:Javascript 获取 返回值 中的 JavaScriptCore WebKit      更新时间:2023-09-26

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

似乎

还可以。 但也许你应该把 ; 到ReturnOne()末尾。

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

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

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