我正在使用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返回一个对象,只要我能得到我期望的数值。
答案 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);