我正在使用 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/