检测wxPython的html2-web视图中的链接鼠标悬停事件



背景:

自从更新到2.9.4以来,我已经开始将pygtk版本的webkit切换到wxPython附带的新html2 webview。

问题:

从我从文档(http://wxpython.org/Phoenix/docs/html/html2.WebView.html#html2-webview)中可以看到,没有办法(使用python)检测链接何时悬停(例如"hover -over-link"事件http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-hovering-over-link)。

我将不得不诉诸一些javascript黑客来做到这一点,还是有另一个,更好的,解决方案?

所以,直到这得到添加,我只是与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_navigation事件,捕捉任何自定义页面更改并否决页面更改事件,例如

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
    ...

应该可以添加它。在trac.wxwidgets.org上为它添加一个票

Ross给出的解决方案是有效的,直到我得到一个本地。html文件被IE8不优雅地劫持:res://ieframe.dll/dnserrordiagoff_webOC.htm#file:///

是的,我用的是Windows 7 x64。这个错误首先出现在IE11上,但在寻找解决方案失败后,我决定卸载它,并将IE8重置为默认设置(包括移回其临时文件夹)。令我沮丧的是,这不起作用。

然后我想到了前缀"PROXY/…"字符串与一个有效的URI,如"127.0.0.1"。但这还不够。但我最终通过添加一个端口:"127.0.0.1:80"使其工作。由于这个URI经常被本地服务器使用,所以您可以使用另一个值,例如"127.0.0.3:87"。使用wx 3.0.2和python 2.7.13进行测试。

所以,在javascript部分(python部分保持不变),我用"127.0.0.3:87/PROXY/HOVER_EVENT_START/"代替"PROXY/HOVER_EVENT_START/",用"127.0.0.3:87/PROXY/HOVER_EVENT_END/"代替"PROXY/HOVER_EVENT_END/"。果不其然。

超链接是因特网和HTML之所以存在être的原因。为什么呢?html2 API没有提供简单的方法来处理它们,这对我来说是一个谜。

相关内容

  • 没有找到相关文章

最新更新