1

使用以下代码:

#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 的类?
  2. 为什么当前检查不起作用?
  3. 如何访问对象的其他属性?当我尝试增加索引时,我得到的只是未定义的,当我使用时,我jsc_value_object_enumerate_properties()在内存中只有一个地址。我的目标是访问 CSS、标签、ID/Class、父元素和子元素。我不知道如何将 char** 转换为可用信息。
4

1 回答 1

0

按顺序回答您的问题:

  1. 查看API 文档,目前似乎不可能。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()

于 2019-10-27T23:18:22.520 回答