Webkit GTK:使用DOM Tree Walker

时间:2012-08-02 12:59:02

标签: c++ c webkit gtk webkitgtk

所以,我正在试验Webkit GTK DOM功能。它非常简单,除了一件事:API中有一个有用的部分名为WebKitDOMTreeWalker,我认为它可以让你遍历DOM中的每个节点,就像Javascript中的TreeWalker对象一样。

现在,在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以及谷歌进行了广泛的搜索,而且无论如何都找不到创建WebKitDOMNodeFilter 对象! WebKitDOMNodeFilter.h的头文件不公开WebKitDOMNodeFilter的任何构造函数。似乎API根本不会暴露实际构建WebKitDOMNodeFilter对象。

然而...... API公开了许多函数(如webkit_dom_document_create_tree_walker和webkit_dom_document_create_node_iterator),其中需要一个WebKitDOMNodeFilter。那么...... API现在还不完整吗?或者,有没有办法创建一个我只是没有看到的Filter对象?

1 个答案:

答案 0 :(得分:0)

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