據我所知,從RunScript()獲取返回值的唯一方法是使用頁面標題hack。
例如如果您希望在檢索數據後重置標題,則可以在RunScript的某處將document.title設置爲您希望檢索的值,並使用GetCurrentTitle()將其獲取到python中。
所以,如果self.html是web視圖
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從網頁流量是可以做到的(如在羅賓發佈的鏈接提示)中啓動它,這樣當它收到自定義網址方案,例如retrieveata:// data/....它從url中檢索數據,並執行您想要的任何操作,確保您在某個時刻調用evt.Veto()。然後,您可以通過簡單地從JavaScript內調用合適的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( ),並確保在調用頁面之前設置document.title。
謝謝。我可能能夠在我的應用程序中工作。希望wx能有一種正式的方式來儘快返回數據。 – Tim