所以,我正在试验 Webkit GTK DOM 函数。它非常简单,除了一件事:API 中有一个有用的部分称为WebKitDOMTreeWalker
,我假设它可以让您遍历 DOM 中的每个节点,就像TreeWalker
Javascript 中的对象一样。
现在,在 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 现在不完整吗?或者,有什么方法可以创建一个我没有看到的过滤器对象?