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() で別ページに遷移するときは履歴に残らないけど、同じページに遷移するときは履歴に残るみたい。