先日ちらっと書きましたが、Add Tab Index for Googleの「ブラウザの戻るでGoogleを表示すると元の場所にフォーカスが合わない」バグを直すのに、URLに#〜を付加して直すというのをやってみました。
狙っていた処理の流れは、
- ページを離れる瞬間に、URLの#以下にフォーカスしていた場所を記憶(例:#tabIndex=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が変ってることがユーザに分かってしまうのであきらめました。
その代わりにクッキーを使って解決したんですが、こちらにも問題が・・・。
その辺の話を、また次回。