如何访问 JSCValue 对象的属性

How to access a JSCValue Object's properties

使用以下代码:

#include <webkit2/webkit-web-extension>
/* Skipping through a lot of code */
{
  JSCValue* result = jsc_context_evalutate(jsCtx, "document.getElementsByTagName('body')", -1);
  std::cout << jsc_value_to_string(jsc_value_object_get_property_at_index(result, 0)) << "\n";
  if (jsc_value_object_is_instance_of(result, "HTMLBodyElement"))
    std::cout << "Instance of HTMLBodyElement\n";
}

我打印了 [object HTMLBodyElement] 但没有打印 Instance of HTMLBodyElement。我对此有一些疑问。

  1. 如何在不检查的情况下获取 JSCValue 的 class?
  2. 为什么当前检查不起作用?
  3. 如何访问对象的其他属性?当我试图增加索引时,我得到的都是未定义的,当我使用 jsc_value_object_enumerate_properties() 时,我在内存中只有一个地址。我的目标是访问 CSS、Tag、ID/Class、父元素和子元素。我不知道如何将 char** 转换为可用信息。

按顺序回答您的问题:

  1. 查看 API documentation,目前似乎不可能。 jsc-glib API 相当有限。

  2. 因为 result 是保存对象的数组,所以在 JavaScript 术语中你计算的是 [body] instanceof HTMLBodyElement 而不是 body instanceof HTMLBodyElement

  3. 如果没有看到您的代码就无法确定,但您可能也在数组上调用了 jsc_value_object_enumerate_properties(),并且该数组只有一个可枚举的 属性,即索引 0。如果你在 body 元素上调用它,那么你应该能够通过将每个字符串从该函数返回的字符串数组传递到 jsc_value_object_get_property() 来获取每个 属性 的值。