at posts/single.html

location.replace() の挙動が IE と Firefox で違う?

自動的にセクションアンカーを付けるプラグインでは JavaScript の location.replace() を使っているんだけど、手元の環境 (XP SP2) では IE6 と Firefox で挙動が違う。

日記のトップページ (http://www.machu.jp/diary/) から今日の日記 (http://www.machu.jp/diary/20081208.html) へと移動した場合のブラウザの履歴を比較した。

IE6 だと

http://www.machu.jp/diary/
http://www.machu.jp/diary/20081208.html
http://www.machu.jp/diary/20081208.html#p01 ← いまここ

これだと、戻るボタンを押したときにトップページではなくアンカーなしのURLに戻ってしまう。

Firefox だと

http://www.machu.jp/diary/
http://www.machu.jp/diary/20081208.html#p01 ← いまここ

こっちが期待する動作。アンカー無しのURLが履歴に残らないので、戻るボタンを押すとトップページに戻る。

ちなみに

オライリーの JavaScript 第5版には、以下のように書かれている。

replace() メソッドは、履歴リストに新しい項目を作成せずに、指定された URL で現在の URL を置き換えます。

Web でググってみても、履歴に残さないときは replace() を使おうって書いてあるし。謎だ。 このままじゃこのプラグインは使えないなぁ。

追記

もうちょっと調べてみた。 IE の場合、 location.replace() で別ページに遷移するときは履歴に残らないけど、同じページに遷移するときは履歴に残るみたい。

関連する日記