所以,我正在试验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对象?
答案 0 :(得分:0)
您可以尝试通过调用将null转换为WebKitDOMNodeFilter
类型
WEBKIT_DOM_NODE_FILTER(null)
?