Javascript jsc_value_object_invoke_method(),jsc_value*对象不工作 我试图从C++代码中调用一些jQuery函数。 我所做的是将整个jQuery库作为字符串复制,并使用jsc_context_evaluate()访问所有jQuery方法
这是一个带有字符串的非特定精简版本,它可以正常工作:Javascript jsc_value_object_invoke_method(),jsc_value*对象不工作 我试图从C++代码中调用一些jQuery函数。 我所做的是将整个jQuery库作为字符串复制,并使用jsc_context_evaluate()访问所有jQuery方法,javascript,c++,webkit,javascriptcore,webkitgtk,Javascript,C++,Webkit,Javascriptcore,Webkitgtk,这是一个带有字符串的非特定精简版本,它可以正常工作: JSCValue*jsVar=jsc_context_evaluate(jsCtx,“$('some-div')”); jsc_值_对象_调用_方法(jsVar,“html”,G_类型_字符串,“foo”,G_类型_无); 这将“somediv”的内容更改为“foo”。(我知道“some div”应该有“.”或“#”但这只是为了表示) 当我尝试使用一个对象时,该函数不起作用 JSCValue*jsVar=jsc_context_evalua
JSCValue*jsVar=jsc_context_evaluate(jsCtx,“$('some-div')”);
jsc_值_对象_调用_方法(jsVar,“html”,G_类型_字符串,“foo”,G_类型_无);
这将“somediv”的内容更改为“foo”。(我知道“some div”应该有“.”或“#”但这只是为了表示)
当我尝试使用一个对象时,该函数不起作用
JSCValue*jsVar=jsc_context_evaluate(jsCtx,“$('some-div')”);
JSCValue*jsDiv=jsc_context_evaluate(jsCtx,“$('some-other-div')”);
jsc_值_对象_调用_方法(jsVar,“html”,G_类型_对象,jsDiv,G_类型_无);
“somediv”没有得到“someotherdiv”的内容,什么也没有发生。当我将
…invoke_method()
的返回值打印为带有jsc_value\u to_string()
的字符串时,我没有定义。我尝试了其他jQuery方法,如add
,但结果是一样的,函数返回未定义,没有任何更改。我要做的第一件事是检查函数调用是否没有发出异常。显然,jsc\u context\u 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的doc(),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);
我还想为
add()
函数做这项工作,文档中说它可以接受jQuery对象。我得到的错误是TypeError:unsupported type GObject
我能够让html()
函数工作,但不知道如何让对象作为参数工作。因此,如果将jsDiv
转换为JSC\u type\u值,我认为这个问题可以得到解决。试试这个:jsc_值_对象_调用_方法(jsVar,“html”,jsc_类型_值,jsDiv,G_类型_无)代码>现在可以工作了!不知道JSC_类型_值
被认为是GType