2

バックグラウンド:

2.9.4 に更新してから、(ひどくハッキングされた) pygtk バージョンの webkit を、wxPython に付属する新しい html2 webview に切り替え始めました。

質問:

ドキュメント ( http://wxpython.org/Phoenix/docs/html/html2.WebView.html#html2-webview )からわかることから、リンクがいつホバーされているかを (python を使用して) 検出する方法はありません(「hovering-over-link」イベントhttp://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-hovering-over-linkなど)。

これを行うには、JavaScriptハッカーに頼る必要がありますか、それとも別のより良い解決策がありますか?

4

3 に答える 3

4

したがって、これが追加されるまで、私は JavaScript ソリューションを使用しました。これを行うには、javascript を使用して、Python コードで拒否されるページ変更イベントを作成します。

まず、ページが読み込まれるたびに、次の JavaScript を実行します (RunScript を使用)。

    function hoverLink(link) { 
        window.location.href = "PROXY/HOVER_EVENT_START/" + link;
    }
    function hoverLinkEnd(link) { 
        window.location.href = "PROXY/HOVER_EVENT_END/" + link;
    }

    function setupHoverLinks(elem) { 
        elem.onmouseover = function() {
            hoverLink(elem.href);
        }
        elem.onmouseout = function() {
            hoverLinkEnd(elem.href);
        }
    }

    // Loop through all links in the document and
    // setup some event listeners.
    links = document.getElementsByTagName("a");

    for (var i = 0; i < links.length; i++) {
            link = links[i].href;
            setupHoverLinks(links[i]);
    }

これにより、いずれかのページ リンクでマウス イン/マウス アウト イベントが発生するたびに、ページ変更イベントが発生します。URL の最後の部分には、関連するリンクが含まれています。

次に、EVT_WEB_VIEW_NAVIGATING イベントにフックし、カスタム ページの変更をキャッチして、ページ変更イベントを拒否します。

def OnPageNavigation(self, evt):
    ...
    uri = evt.GetURL() # you may need to deal with unicode here

    if "PROXY/HOVER_EVENT_START/" in uri:
        # Simple way to get the link
        link = uri.split("PROXY/HOVER_EVENT_START/")[1]
        ...
        # Run your mouseover code
        ...
        evt.Veto()
        return
    elif "PROXY/HOVER_EVENT_END/" in uri:
        ...
        # Run your mouseout code
        ...
        evt.Veto()
        return
    ...
于 2013-06-08T10:36:02.677 に答える