stackoverflow.com/#_=_
にアクセスすると、window.location.hash
は#_=_
と評価されます。いいよ.
window.location.hash = ''
を実行してハッシュをクリアすると、URLはstackoverflow.com/#
になります。 (末尾の#
に注意してください。)
#
のwindow.location.hash
が一貫して含まれない、または除外されるのはなぜですか?ページをリロードせずに#
をURLから削除するにはどうすればよいですか?
( [〜#〜] mdn [〜#〜] は言う
[ハッシュ]は、#記号を含む、URLの#記号に続く部分です。
ただし、空のハッシュの場合はそうではありません。)
2番目の質問に回答するには(#
ページの更新なし):
history.pushState('', document.title, window.location.pathname);
最初の質問に答える:
Mozilla.orgの window.location doc によると: "#記号を含むURLの一部(ある場合は#記号を含む。)URLに#が含まれていないか、#の後に何もない場合は空の文字列。 "
興味深いことに、そのドキュメントは2013年4月8日に更新されました。ドキュメントを確認した後に追加されたかどうかはわかりません。
ちなみに(および回答を参照)、window.location.hashとpushStateは密接に関連していますが、異なる概念です。
この動作を駆動する2つのことがあります。
したがって、基本的に、ハッシュプロパティを設定してもリロードは行われず、他のプロパティを設定してもリロード(またはブラウザの設定に応じてE-Tag/modified-sinceヘッダーチェック)が行われます。
一貫性を保つために、ブラウザビルダーは空のハッシュの設定を、ハッシュとして「#」の設定に変換すると仮定します。このように、ロケーションバーのURLはリロードにつながりません。しかし、この後者の部分は純粋な推測です。