jsc_value_object_invoke_method() 与 JSCValue* 对象不工作
jsc_value_object_invoke_method() with JSCValue* object not working
我正在尝试从 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()
的 return 值打印为带有 jsc_value_to_string()
的字符串时,我得到了未定义。我尝试使用其他 jQuery 方法,如 add
,但结果相同,函数 return 未定义,没有任何变化。
我要做的第一件事是检查函数调用是否没有发出异常。显然 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,returns 节点内容。
- content(字符串),设置节点的内容。
- 函数,使用一个函数来设置节点的内容。
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);
我正在尝试从 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()
的 return 值打印为带有 jsc_value_to_string()
的字符串时,我得到了未定义。我尝试使用其他 jQuery 方法,如 add
,但结果相同,函数 return 未定义,没有任何变化。
我要做的第一件事是检查函数调用是否没有发出异常。显然 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,returns 节点内容。
- content(字符串),设置节点的内容。
- 函数,使用一个函数来设置节点的内容。
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);