JavaScript へのグローバル コンテキストを取得するために、JavaScriptCore API を使用しています。Javascript から返された値を C で操作できるようにしたいと考えています。関連するコード サンプルを次に示します。
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 から返される代替手段でも問題ありません。