javascript - 在WebKit/JavaScriptCore中获取Javascript的返回值

标签 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 吗?

如有任何建议,我们将不胜感激。谢谢。

编辑:我做了一些挖掘,发现了这个 gem - 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);

关于javascript - 在WebKit/JavaScriptCore中获取Javascript的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345535/

相关文章:

javascript - Angular Http 订阅不工作

javascript - 在表格的特定列中插入单元格

javascript - 可以将 Javascript 编写成脚本到 xcode 中吗?

video - Safari 4.0.5 不会播放任何 HTML5 (H.264) 视频

javascript - `JS engine` 或 `IOS` 上的 `MaxOS' 是 Chrome 浏览器 `V8` 还是 `JavaScriptCode`?

javascript - 在 Swift 中,如何调用 JSContext.callWithArguments 返回的 Jscript 对象的方法

javascript - Canvas 矩形背景图像

javascript - 使用 jQuery 插入时并不总是设置图像的高度

javascript - webkitgtk 自定义方案和 XMLHttpRequest

ios - 如何在 iOS JavaScriptCore 中处理 javascript Promises