使用以下代码:

#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。我对此有一些疑问。
  • 如何无需检查即可获取JSCValue的类?
  • 为什么当前检查不起作用?
  • 如何访问对象的其他属性?当我尝试增加索引时,我得到的所有信息都是不确定的,当我使用jsc_value_object_enumerate_properties()时,我在内存中仅获得一个地址。我的目标是访问CSS,Tag,ID / Class,父元素和子元素。我不知道如何将char **转换为可用信息。
  • 最佳答案

    依次回答您的问题:

  • 查看API documentation,目前看来不可能。 jsc-glib API相当有限。
  • 因为result是保存对象的数组,所以以JavaScript术语来说,您评估的是[body] instanceof HTMLBodyElement而不是body instanceof HTMLBodyElement
  • 不可能在没有看到代码的情况下肯定地说出来,但是很有可能您也在数组上调用了jsc_value_object_enumerate_properties(),并且该数组只有一个可枚举的属性,即索引0。如果在body元素上调用它,则应该可以通过将函数返回的字符串数组中的每个字符串传递给jsc_value_object_get_property()来获取每个属性的值。
  • 07-28 11:26