アドレスバーからハッシュを削除する
ブラウザのアドレスバーには、URLに加えて、URLパラメータ(クエリー文字列)と、ハッシュが表示される。このサイトのトップページでいうと、
例:https://www.muhyo.com/index.html?ymd=20230614#999
というように、「?ymd=20230614」が URL パラメータであり、「#999」がハッシュになる。
このページをブックマークすると、アドレスバーに表示されているURLパラメータ(クエリー文字列)やハッシュを含めてまるごとにブックマークされる。ブックマーク際してアドレスバーの表示内容を編集して不要な部分を削ることはできるのだが、通常はそのままブックマークしてしまうことが多いと思う。
このホームページでは「自己リダイレクト」機能の中でURLパラメータを削除しているので、アドレスバーの中にはURL以外はハッシュだけが残っている。
例:https://www.muhyo.com/index.html#999
ハッシュを含んだままブックマークすると、次回、ブックマークからそのページを表示した場合は画面のトップからではなく、ブックマークした時点で表示されていたところまでスクロールした状態で表示される。
それはそれで問題ないことであり、本来のブックマークの目的にかなった動作ということができる。しかし、通常のニーズは次のどれであろうか?
(1) ページの中のその位置を閲覧したい。
(2) 部分ではなく、そのページ全体を再度閲覧したい。
思うに、(1) を基本とし、必要に応じてブックマーク時に整正することにより (2) の目的を達成するというのがブラウザの基本機能のように思う。つまり、(2) が目的であれば、アドレスバーのハッシュを削除してからブックマークすれば良いということなのだ。
だがしかし、自分としては、(1) と (2) は逆であると思う。つまり、(2) が基本機能(つまりデフォルト)である方が都合が良いと思う。
ブラウザのベンダーにすると、(2) を基本機能とすると、(1) の用途に応えるためには、より複雑なステップを設けなくてはならない。つまり、単純に考えて(1) と (2) を選択する機能であり、ブッマークボタンを2種類用意する必要がある。さらに言うと、URLパラメータとハッシュの片方若しくは両方を含めるか、それともURL本体のみかといった計4通りの選択が必要になる。使い勝手を考えると複雑なUIになってしまう。このあたりも現在の機能に落ち着いた理由なのかもしれない。
ということで、ブラウザは (1) を基本機能とするところを、このサイトに関しては (2) を基本機能とするように変更するプログラムを設定した。プログラムは javascript で次の8行からなる。
let clear = ()=>{
history.replaceState(null,null,window.location.pathname);
}
let clear_t = ()=>{
setTimeout(clear, 200);
}
window.addEventListener('hashchange', clear_t, false);
window.addEventListener('load', clear_t,false);
このプログラムはファィル名を url_clean.jp とし、ルートディレクトリにおき、呼び出すときは、</body> の直前で
<script src="/url_clean.js"></script>
と記述すればよい。それによって、ハッシュを削除することができる。