我正在将 WebKitGTK+ 项目从 C++ 转换为 Python(使用 PyGI)。我需要检测<input>
页面上的元素获得或失去焦点的任何时间。在 C++ 项目中,我使用此代码(基于此示例):
WebKitDOMDocument* document = webkit_web_view_get_dom_document(view);
WebKitDOMNodeList* nodes = webkit_dom_document_get_elements_by_tag_name(document, "*");
int len = webkit_dom_node_list_get_length(nodes);
for(int i = 0; i < len; i++) {
WebKitDOMNode* node = webkit_dom_node_list_item(nodes, i);
if(WEBKIT_DOM_IS_HTML_INPUT_ELEMENT(node)) {
webkit_dom_event_target_add_event_listener(WEBKIT_DOM_EVENT_TARGET(node), "focus", G_CALLBACK(inputFocus), false);
webkit_dom_event_target_add_event_listener(WEBKIT_DOM_EVENT_TARGET(node), "blur", G_CALLBACK(inputBlur), false);
}
}
我尝试在 Python 中做同样的事情并想出了:
document = view.get_dom_document()
nodes = document.get_elements_by_tag_name('*')
for i in range(nodes.get_length()):
node = nodes.item(i)
if isinstance(node, WebKit.DOMHTMLInputElement):
node.add_event_listener('focus', inputFocus, False)
问题是,DOMHTMLInputElement
没有add_event_listener
方法。基于 C 绑定,它应该是DOMEventTarget
(which DOMHTMLInputElement
extends) 的一部分,但它与 一起丢失remove_event_listener
,尽管dispatch_event
以某种方式进入。这可能是由于这个 WebKit 错误;我不确定
有没有办法在 Python 中做到这一点?它不必使用我在 C++ 中使用的相同方案,我只需要一些方法来注册一个回调,该回调在每次焦点更改页面上的某些元素时调用