0

最近、HTMLUnit 2.4 から 2.5 に更新しました (最新バージョンを使用しますが、非推奨の API のためにリファクタリングするコードがたくさんあります)。現在、ウィンドウを開く JavaScript で問題が発生しています。

テスト中のページは、レポートの「ロード中の画面をお待ちください」です。ページは新しいウィンドウを開き、最初に印刷を開始したページにリダイレクトします。

したがって、JavaScript は次のようになります。

window.open(url,'report_window');
document.location.href  = original_url;

HtmlUnit 2.4 では、スクリプトは引き続き実行され、元の Window オブジェクトを取得すると、リダイレクトが実行されます。ただし、HtmlUnit 2.5 にアップグレードした後も、元のウィンドウは「お待ちください」ページのままで、リダイレクトは実行されません。window.open の呼び出し後に JavaScript の実行が停止したように見えます。

手動でテストした場合、ページが正しく動作することを確認しました。また、 window.open 呼び出しの後に別の JavaScript を試して、その特定の呼び出しが問題ではないことを確認しました。

このような問題と潜在的な回避策を知っている人はいますか? jQuery との互換性のために、HtmlUnit 2.5 にとどまらなければなりません。

4

1 に答える 1

0

この問題は、WebClient オブジェクトの Web ウィンドウ リスナーから CurrentWindowTracker オブジェクトを削除することで解決できました。残念ながら、このフィールドは完全にカプセル化されているため、リフレクションを介して取得する必要がありました。

        Field windowListeners = WebClient.class
                .getDeclaredField("webWindowListeners_");
        windowListeners.setAccessible(true);
        Collection webWindowListeners = (Collection) windowListeners
                .get(webClient);
        webWindowListeners.clear();
于 2010-08-26T19:33:04.557 に答える