location.replaceで#が外せない

先日ちらっと書きましたが、Add Tab Index for Googleの「ブラウザの戻るでGoogleを表示すると元の場所にフォーカスが合わない」バグを直すのに、URLに#〜を付加して直すというのをやってみました。

狙っていた処理の流れは、

  1. ページを離れる瞬間に、URLの#以下にフォーカスしていた場所を記憶(例:#tabIndex=3)
  2. 再度表示するときは#以下の情報をもとにフォーカスを合わせる
  3. URLから#〜を取り除く

というもの。
#〜の付加にlocation.replaceを使えばブラウザの履歴にも残らないのでユーザには意識されずに済みます。


ただ、結論から言うと失敗しました。


まず、#を付加するのには成功しました。

location.replace("#tabIndex=3");

これで、URLが「http://www.google.co.jp/search?hl=ja(中略)&lr=lang_ja#tabIndex=3」になります。
ここまではいいんですが、問題はこれを外す時。

location.replace("#");

これだと、「http://www.google.co.jp/search?hl=ja(中略)&lr=lang_ja#」になってしまいます。
#以下は外れるけど、#そのものは外れない・・・。


それじゃあと、#手前までのURLを入れてみました。

location.replace("http://www.google.co.jp/search?hl=(以下略)");

すると、確かに#は外れるんですがリロードしてしまいました。

location.replace('');

これも、#は外れますがリロード。

location.hash = "";

この場合はリロードするうえ、履歴に遷移が残ってしまいます。


こんな感じでいろいろと試したんですが、やはり#が外れた瞬間にリロードしてしまう模様・・・。
結局、この方法はURLが変ってることがユーザに分かってしまうのであきらめました。



その代わりにクッキーを使って解決したんですが、こちらにも問題が・・・。
その辺の話を、また次回。