2012-04-27 86 views
3

我正在使用JavaScriptCore API來獲取Javascript的全局上下文。我希望能夠操縱我在C.回來從Javascript這裏的值是代碼示例我有一個是相關的:從WebKit/JavaScriptCore中的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

它似乎沒問題。但也許你應該放下;到ReturnOne()結束。

也許你應該將返回的值轉換爲int。因爲它返回double,並且你的打印函數接受int值。

我沒有嘗試,但它應該是什麼樣子,

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