首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jsc_value_object_invoke_method()与JSCValue* object不工作

jsc_value_object_invoke_method()与JSCValue* object不工作
EN

Stack Overflow用户
提问于 2019-11-23 04:34:54
回答 1查看 93关注 0票数 0

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

下面是一个带有字符串的非特定的简化版本,它运行得很好:

代码语言:javascript
复制
JSCValue* jsVar = jsc_context_evaluate(jsCtx, "$('some-div')");
jsc_value_object_invoke_method(jsVar, "html", G_TYPE_STRING, "foo", G_TYPE_NONE);

这会将‘some’的内容更改为"foo“。(我知道“一些-div”真的应该有一个“.”或“#”,但它只是用于表示)

当我尝试使用一个对象时,这个函数不起作用。

代码语言:javascript
复制
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);

而不是“一些-div”得到‘一些-其他-div’的内容,什么都没有发生。当我将...invoke_method()的返回值打印为带有jsc_value_to_string()的字符串时,就会得到未定义的结果。我在其他jQuery方法(如add )中尝试过,但是结果是相同的,函数返回的是未定义的,没有任何变化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-23 10:26:26

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

代码语言:javascript
复制
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的doc (https://www.geeksforgeeks.org/jquery-html-method/),html函数可以接收3种类型的参数:

node.

  • function,的
  • null,返回节点的内容。
  • content (string),set content of
  • 使用一个函数设置节点的内容。

jsDiv是一个对象。我认为你需要传递它的内容,如下所示:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59004553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档