5

WebView (および WebEngine) に依存する JavaFX でデータ マイニング アプリケーションを開発しています。マイニングは 2 つのステップで行われます。最初に、ユーザーは UI を使用して WebView の Web サイトに移動し、興味深いデータを検索できる場所を構成します。次に、定期的に実行されるバックグラウンド タスクを使用して、WebEngine が同じドキュメントを読み込み、読み込まれたドキュメントからデータを抽出しようとします。

これはほとんどの場合に完全に機能しますが、最近、AJAX を使用してコンテンツをレンダリングするページで問題が発生しました。WebEngine がドキュメントをロードしたかどうかを確認するために、loadWorkerstateProperty. 状態が成功に移行した場合、ドキュメントが読み込まれていることがわかります (document.ready() または同等の機能で実行される可能性のある JavaScript と一緒に)。これは、私が間違っていなければ JavaFX スレッドで JavaScript が実行されるためです (ソース: https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx )。ただし、AJAX 呼び出しが開始されると、JavaScript の実行が終了し、エンジンはドキュメントの準備ができていることを通知しますが、未解決の AJAX 呼び出しのために内容が変更される可能性があるため、明らかにそうではありません。

AJAX呼び出しが終了したときに通知されるようにフックを挿入する方法はありますか? デフォルトの完全なハンドラーをインストールしようとしました$.ajaxSetup()が、ajax 呼び出しが完全なハンドラーをオーバーライドすると、デフォルトが呼び出されないため、非常に危険です。さらに、これを挿入できるのは、ドキュメントが最初にロードされた後だけです (それまでに、いくつかの AJAX 呼び出しが既に実行されている可能性があります)。アップコールでこのインジェクションをテストしましたが、独自の完全なハンドラーを提供しないコマンド (デフォルト ハンドラーのインジェクション後) で起動される AJAX 呼び出しに対しては正常に動作します。

私は 2 つのことを探しています: 1 つ目: AJAX 呼び出しの完了ハンドラーにフックする一般的な方法、2 つ目: WebEngine がすべての AJAX 呼び出しを終了し、後で通知するのを待つ方法。

4

2 に答える 2