0

所以,我正在试验 Webkit GTK DOM 函数。它非常简单,除了一件事:API 中有一个有用的部分称为WebKitDOMTreeWalker,我假设它可以让您遍历 DOM 中的每个节点,就像TreeWalkerJavascript 中的对象一样。

现在,在 Javascript 中,通过调用创建 TreeWalker:

document.createTreeWalker(root, nodesToShow, filter, entityExpandBol)


因此,在 WebKit GTK 中,API 中有一个明显的对应物——一个名为webkit_dom_document_create_tree_walker. 函数签名是:

WebKitDOMTreeWalker* webkit_dom_document_create_tree_walker(WebKitDOMDocument* self, WebKitDOMNode* root, gulong what_to_show, WebKitDOMNodeFilter* filter, gboolean expand_entity_references, GError **error);

所以用 WebKit GTK 创建 TreeWalker 看起来很简单——除了一个大问题:第四个参数webkit_dom_document_create_tree_walker需要一个过滤器对象,也就是说,它需要一个WebKitDOMNodeFilter. 好吧,Javascript 函数也需要一个过滤器,但是null如果您不想使用过滤器,您可以通过。使用 Webkit API,传递NULL不起作用。如果你打电话:

WebKitDOMTreeWalker* walker = webkit_dom_document_create_tree_walker(doc, root, SHOW_ALL, NULL, false, err)

您收到错误消息:

** (webkit:3367): CRITICAL : WebKitDOMTreeWalker* webkit_dom_document_create_tree_walker(WebKitDOMDocument*, WebKitDOMNode*, gulong, WebKitDOMNodeFilter*, gboolean, GError ): 断言“过滤器”失败

因此,WebKit API 不会接受过滤器参数的 NULL 指针。显然你需要传递一个WebKitDOMNodeFilter. 好的,再一次 - 这也不是问题,除非我通过 WebKit API 和 Google 进行了广泛搜索,但无论如何我都找不到创建 WebKitDOMNodeFilter对象!WebKitDOMNodeFilter.h的头文件不公开任何 WebKitDOMNodeFilter 的构造函数。似乎 API 根本不会公开实际构造 WebKitDOMNodeFilter 对象。

然而...... API 公开了许多需要WebKitDOMNodeFilter 的函数(如 webkit_dom_document_create_tree_walker 和 webkit_dom_document_create_node_iterator)。那么...... API 现在不完整吗?或者,有什么方法可以创建一个我没有看到的过滤器对象?

4

1 回答 1

0

您可以尝试WebKitDOMNodeFilter通过调用将 null 转换为类型 WEBKIT_DOM_NODE_FILTER(null)吗?

于 2012-08-02T13:19:35.967 回答