簡體   English   中英

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()作為一個字符串jsc_value_to_string()我得到了一個未定義。 我用其他 jQuery 方法(如add嘗試過它,但結果相同,該函數返回 undefined 並且沒有任何變化。

我要做的第一件事是檢查函數調用是否沒有發出異常。 顯然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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM