3

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 から返される代替手段でも問題ありません。

4

1 に答える 1

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);
于 2013-01-02T13:11:08.910 に答える