2012-04-27 6 views
3

Javascriptのグローバルコンテキストを取得するためにJavaScriptCore APIを使用しています。私はここで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を返すので、あなたのprint関数はint値を受け入れます。

私がしようといけないが、それは

JSStringRef script = JSStringCreateWithUTF8CString("ReturnOne();"); 
JSValueRef val = JSEvaluateScript(jsContext, script, NULL, NULL, 0, NULL); 
return (int)JSValueToNumber(jsContext, val, NULL); 
、のようになります。
関連する問題