私の知る限り、RunScript() から戻り値を取得する唯一の方法は、ページ タイトル ハックを使用することです。
たとえば、RunScript のどこかで document.title を取得したい値に設定し、GetCurrentTitle() を使用して Python に取得します。データを取得した後にタイトルをリセットしたい場合。
したがって、self.html が webview の場合
self.html.RunScript("""
//javascript goes here
// variable we wish to retrieve is called return_value
document.title = return_value
""")
r = self.html.GetCurrentTitle()
webview 内から開始したい場合は、wxEVT_COMMAND_WEB_VIEW_NAVIGATING をオーバーライドすることで (Robin が投稿したリンクで示唆されているように) それを実行できます。 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
または、2 つのアイデアを組み合わせて使用し、アクセス時に GetPageTitle() を呼び出す単一の URL を作成し、ページを呼び出す前に document.title を設定することもできます。