[jsc_value_object_invoke_method(),JSCValue *对象不起作用

问题描述 投票:0回答:1

我正在尝试从C ++代码中调用一些jQuery函数。我所做的是将整个jQuery库复制为一个字符串,并使用jsc_context_evaluate()来访问所有jQuery方法。

这里是带有字符串的非特定的简化版本,它可以正常工作:

JSCValue* jsVar = jsc_context_evaluate(jsCtx, "$('some-div')");
jsc_value_object_invoke_method(jsVar, "html", G_TYPE_STRING, "foo", G_TYPE_NONE);

这会将'some-div'的内容更改为“ foo”。 (我知道'some-div'应该确实有一个'。'或'#',但这仅是表示形式)

当我尝试使用对象时,该功能不起作用。

JSCValue* jsVar = jsc_context_evaluate(jsCtx, "$('some-div')");
JSCValue* jsDiv = jsc_context_evaluate(jsCtx, "$('some-other-div')");
jsc_value_object_invoke_method(jsVar, "html", G_TYPE_OBJECT, jsDiv, G_TYPE_NONE);

没有'some-div'获得'some-other-div'的内容,什么也没有发生。当用...invoke_method()jsc_value_to_string()的返回值打印为字符串时,我不确定。我用add等其他jQuery方法进行了尝试,但结果相同,该函数返回未定义的内容,没有任何变化。

javascript c++ webkit javascriptcore webkitgtk
1个回答
0
投票

我要做的第一件事是检查函数调用是否没有发出异常。显然jsc_context_evaluate在工作,所以我只检查了最后一个函数调用:

JSCValue* jsVar = jsc_context_evaluate(jsCtx, "$('some-div')");
JSCValue* jsDiv = jsc_context_evaluate(jsCtx, "$('some-other-div')");
jsc_value_object_invoke_method(jsVar, "html", G_TYPE_OBJECT, jsDiv, G_TYPE_NONE);
JSCException* exception = jsc_context_get_exception(jsCtx);
if (exception != NULL) {
  g_print("%s: %s\n", jsc_exception_get_name(exception),
                      jsc_exception_get_message(exception));
  free(exception);
  return;
}

这可能会提示您正在发生的事情。

我的怀疑是,问题在于您正在将对象传递给jQuery的函数html。根据jQuery的文档(https://www.geeksforgeeks.org/jquery-html-method/),html函数可以接收3种类型的参数:

  • null,返回节点的内容。
  • 内容(字符串),设置节点的内容。
  • 函数,使用函数来设置节点的内容。

jsDiv是一个对象。我认为您需要传递其内容,例如:

JSCValue* jsVar = jsc_context_evaluate(jsCtx, "$('some-div')");
JSCValue* jsDiv = jsc_context_evaluate(jsCtx, "$('some-other-div')");
JSCValue* content = jsc_value_object_invoke_method(jsDiv, "html", G_TYPE_NONE);
char* contentString = jsc_value_to_string(jsCtx, content);
jsc_value_object_invoke_method(jsVar, "html", G_TYPE_OBJECT, contentString, G_TYPE_NONE);
© www.soinside.com 2019 - 2024. All rights reserved.