2013-02-05 2 views
0

나는 htmlWindow를 사용하는 앱을 가지고 있으며이를 wx 2.9의 새로운 webview로 마이그레이션하려고합니다. 그러나 웹 페이지에서 JavaScript 변수를 파이썬 코드로 다시 전달하는 데 사용할 수있는 기본 제공 메서드가 없다는 것을 배웠습니다. 자바 스크립트를 페이지로 보낼 수있는 RunScript 메서드가 있지만 사용자 클릭이나 다른 사용자 상호 작용에서 요소 ID를 검색하는 메서드는 없습니다.wxWidgets/wxPython : htmlWindow에서 Webview 로의 이전

제 질문은이 문제에 대한 해결 방법이 있습니까? 경고 전화 나 다른 것을 가로 채고 데이터를 가져 오는 방법이 있습니까? 웹 뷰 디스플레이는 사용자 상호 작용으로부터 데이터를 수신 할 수 없다면별로 가치가 없습니다.

답변

1

지금까지 RunScript()에서 반환 값을 얻는 유일한 방법은 페이지 제목 해킹을 사용하는 것입니다.

RunScript의 어딘가에서 document.title을 검색하려는 값으로 설정하고 GetCurrentTitle()을 사용하여 파이썬으로 가져 오면 데이터를 검색 한 후에 제목을 재설정 할 수 있습니다.

그래서 self.html는 웹보기를 경우

self.html.RunScript(""" 
    //javascript goes here 
    // variable we wish to retrieve is called return_value 
    document.title = return_value 
    """) 
r = self.html.GetCurrentTitle() 

당신이 wxEVT_COMMAND_WEB_VIEW_NAVIGATING를 재정 의하여 (로빈 게시 된 링크에서 제안으로) 그것을 할 수있는 웹보기 내에서 그것을 시작하려면 너무 때를 그 맞춤 URL 스키마를받습니다. retrieveata : // data/.... 그것은 url로부터 데이터를 가져오고 당신이 원하는 것과 상관없이 어떤 시점에서 evt.Veto()를 호출하도록합니다. 그런 다음 자바 스크립트 내에서 적절한 URL을 호출하여 원하는 모든 데이터를 전달할 수 있습니다. 아래

완전히 테스트되지 않은 코드 (단지 당신이 할 수있는 방법에 대한 아이디어를 제공하기 위해)

def OnPageNavigation(self, evt): 
    url = evt.GetUrl() 
    if url.startswith("retrievedata://data/"): 
     data = url[len("retrievedata://data/"):] 
     evt.Veto() 
     // Do whatever you want with the data 

은 또한 당신이이 개 아이디어의 조합을 사용하여 액세스 할 때이 GetPageTitle를 호출하는 단일 URL을 만들 수를 () 페이지를 호출하기 전에 document.title을 설정해야합니다.

+0

감사합니다. 나는 내 애플 리케이션으로 둘 다 일할 수 있습니다. 다행히 wx는 데이터를 곧 반환 할 수있는 공식적인 방법을 원할 것입니다. – Tim

0

최근 wx-users 메일 목록에 대한 토론과 이와 같은 해결 방법에 대한 제안이있었습니다. 나는 그것을 직접 시도하지 않았지만, 유용하다고 생각할 수도 있습니다. https://groups.google.com/d/topic/wx-users/Pdzl7AYPI4I/discussion

+0

감사하지만 이러한 해결 방법은 단추 또는 링크에 대한 것 같습니다. 사용자가 안으로 클릭하거나 넘어갈 때 요소의 id (div, span, p 등)를 파이썬으로 되돌릴 수 있어야합니다. 자바 스크립트는 변수를 반환 할 수 있지만 파이썬 코드에 변수를 가져 오는 방법이 필요합니다. – Tim

관련 문제