6

ページが iframe 内にある場合、Internet Explorer で奇妙な動作が発生します。URL のハッシュのみが変更されているはずですが、window.history.back() を呼び出すと iframe が再読み込みされるようです。ページが iframe 内にない場合、ページは適切に動作し、ページをリロードしません。なぜこれが起こっているのか、それを防ぐ方法はありますか?

IE9 でこれを示すフィドルを作成しました。

http://jsfiddle.net/peh96/5/

jsfiddle は iframe を使用するため、動作は iframe の動作になります。「#foo」と「#bar」をクリックすると、URL のハッシュが変更されます。「戻る」リンクをクリックすると、window.history.back() がトリガーされます。これを行うとタイムスタンプが変更され、ページがリロード中であることがわかります。

または、iframe を直接ロードする場合:

http://fiddle.jshell.net/peh96/5/show/

[戻る] をクリックしてもタイムスタンプが変わらないことに気付くでしょう。

Chrome と Firefox は iframe 内にあるかどうかに関係なく一貫しているため、これは IE のみの問題です。

このリロードを防ぐ方法はありますか?

4

1 に答える 1

2

コンテキスト メニューから [戻る] コマンドを選択すると、同じことが行われます。IE10では HTML5 State Managementを使用できます。残念ながら IE9 では、ハッシュ履歴を追跡し、次のように変更する必要があります。

document.getElementById('back').addEventListener('click', function () {
    window.location.hash = 'abc';
}, false);

編集

そして、これはどうですか?を呼び出すと、親ウィンドウでイベントをjavascript:window.top.location.hash='bar'キャッチしてから iframe で呼び出すことができます。ただし、これは同じドメインでのみ機能します。onhashchangescrollTo

于 2012-06-17T13:30:30.540 に答える