2013-06-05 1 views
2

배경 :wxPython에의 HTML2 - 웹보기에서 링크 마우스 오버 이벤트를 감지

2.9.4로 업데이트 한 이후 내가 wxPython에 함께 제공되는 새로운 HTML2의 웹보기에 웹킷의 (더럽게에서 해킹) pygtk 버전을 전환하기 시작했습니다.

질문 :

나는이 문서에서 볼 수있는 것과

은 (http://wxpython.org/Phoenix/docs/html/html2.WebView.html#html2-webview)는 같은 "유혹 오버 링크를"이벤트로 링크가 (이상 공중 선회 될 때 감지하는 (Python을 사용) 방법이 없다 http://webkitgtk.org/reference/webkitgtk/stable/webkitgtk-webkitwebview.html#WebKitWebView-hovering-over-link).

일부 자바 스크립트 해커가이 작업을 수행해야합니까? 아니면 다른 더 나은 해결책이 있습니까?

답변

4

이렇게 추가되기 전까지는 자바 스크립트 솔루션을 사용하지 않았습니다. 이렇게하기 위해 자바 스크립트를 사용하여 파이썬 코드에 거부 된 페이지 변경 이벤트를 만듭니다. (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 이벤트에 연결하여 사용자 정의 페이지 변경 사항을 파악하고 페이지 변경 이벤트를 거부합니다. 예 : res://ieframe.dll/dnserrordiagoff_webOC.htm#file:///

예, 난 윈도우 7의 x64에 : 나는 비정상적으로 IE8에 의해 납치 로컬이 .html 파일을 가지고 때까지 로스에 의해 주어진

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

추가 할 수 있어야합니다. trac.wxwidgets.org에서 티켓을 추가하십시오.

+0

감사합니다. 그렇게하겠습니다. – Ross

+0

불타는 pheonix 날아 보자 !!! 좋은 물건! .. – repzero

0

이 솔루션은 일하고 있었다. IE11이 처음에는 오류가 발생했지만 솔루션을 성공적으로 검색하지 못하면 IE8을 제거하고 IE8을 임시 폴더로 이동하는 등의 기본 설정으로 다시 설정하기로 결정했습니다. 나의 당황스럽게도 그건 효과가 없었습니다.

그런 다음 "PROXY/..."문자열 앞에 "127.0.0.1"과 같은 유효한 URI를 붙이는 아이디어가 있습니다. 충분하지 않습니다. 그러나 마침내 포트를 추가하여 작동하도록했습니다 : "127.0.0.1:80". 이 URI는 로컬 서버에서 자주 사용되므로 "127.0.0.3:87"과 같은 다른 값을 사용할 수 있습니다. wx 3.0.2 및 python 2.7.13에서 테스트되었습니다.

그래서, 자바 스크립트 부분에 (파이썬 부분은 동일하게 유지), 나는 "127.0.0.3:87/PROXY/HOVER_EVENT_START/""127.0.0.3:87/PROXY/HOVER_EVENT_END/""PROXY/HOVER_EVENT_END/""PROXY/HOVER_EVENT_START/"을 교체했다. Et voilà.

하이퍼 링크는 인터넷과 HTML의 존재 이유입니다. 왜 wx.html2 API가 그들을 다루는 쉬운 방법을 제공하지 않는지, 그것은 나에게 수수께끼이다.