我將一個WebKitGTK +項目從C++轉換爲Python(使用PyGI)。我需要檢測頁面上的某個<input>
元素是否獲得或失去焦點。在C++項目,我做到了使用此代碼(基於this example):在Python中找不到DOMEventTarget.add_event_listener
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
(其中DOMHTMLInputElement
擴展)的一部分,但它與remove_event_listener
一起丟失,儘管dispatch_event
以某種方式使其進入。可能是由於this WebKit bug;我不確定
有什麼辦法可以在Python中做到這一點?它不必使用我在C++中使用的相同方案,我只需要一些方法來註冊一個回調,每次調用頁面上某些元素的焦點更改