0

htmlWindow を使用するアプリがあり、wx 2.9 にある新しい Web ビューに移行したいと考えています。しかし、JavaScript 変数を Web ページから Python コードに戻すための組み込みメソッドがないことを知りました。JavaScript をページに送信できるようにする RunScript メソッドはありますが、ユーザーのクリックやその他のユーザー操作で要素 ID を取得するメソッドはありません。

私の質問は、これに対する回避策はありますか? たとえば、アラート呼び出しなどを傍受してデータを取得する方法はありますか? ユーザーの操作からデータを受信できない場合、webview の表示はあまり価値がありません。

4

2 に答える 2

1

私の知る限り、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 を設定することもできます。

于 2013-02-07T23:48:16.213 に答える
0

最近、wx-usersメールリストに関するいくつかの議論と、このようなものの回避策の提案がありました。自分で試したことはありませんが、役に立つかもしれません。https://groups.google.com/d/topic/wx-users/Pdzl7AYPI4I/discussionを参照してください

于 2013-02-05T20:09:24.100 に答える