私の場合、ユーザーは「#foobar-popup」の href を持つリンクをクリックします。その onclick イベントを使用して iframe を作成し、それを dom に挿入して表示します。デフォルトの動作を防止する方法は一切行っていないため、ハッシュがブラウザのアドレスに追加されます。それはうまくいきます。次に、「hashchange」イベントをウィンドウにバインドします。$(window).on('hashchange', ...) がトリガーされると、現在のハッシュを確認します。「#foobar-」で始まらない場合 (ハッシュがなくなり、ブラウザーの履歴が戻ったことを意味します)、dom から iframe を削除する関数を呼び出します。ほとんどの場合、これでうまくいきます。ただし、iframeが消えることを期待して[戻る]をクリックしても、何もしません。新しいハッシュが何であるかを知らせるために、hashchange イベントにアラートを設定しました。しません」ハッシュ DID が実際に変更されても、トリガーされることはありません。2 つの異なるウィンドウ (親ウィンドウと新しく挿入された iframe) を混同しているのではないかと思いましたが、そうではありません。
iframe ではナビゲートを行わないため、履歴にエントリを追加するべきではありません。
ところで、私はこの解決策が好きではありませんが、アプリの現在の状態を考えると、プロジェクトへの追加量を最小限に抑えてポイント a からポイント b に到達することが最善の決定です。
jquery-1.8.3 を使用しています。いくつかの履歴プラグインについて読んだことがありますが、これには少しやり過ぎのようです。
hashchange をリッスンするコードは次のとおりです。
$(window).on('hashchange', function() {
if (!(location.hash.match("^#foobar-id"))) {
if ($("#popup-background").length || $("#popup-frame").length) {
$("#popup-background, #popup-frame").remove();
}
}
});
編集:詳細... iframe を追加し、dom に iframe を削除しています。iframe を削除すると、ブラウザの履歴が台無しになることがわかりましたが、一貫して発生させることはできません。dom から iframe を削除すると、履歴全体の一部が失われると思います。