@ujjwal-singh がすでに彼の回答に書いているように、2 番目のパラメーターtitle
は履歴のエントリのラベルとして使用できますが、これはオプションであり、ブラウザーはそれを無視して、タイトルに別のソースを使用することを決定できます。HTML 5 仕様の 5.5.2 章の箇条書き 8 の下のメモには、次のように記載されています。
これtitle
は単なるアドバイスです。ユーザー エージェントは、ユーザー インターフェイスでタイトルを使用する場合があります。
これが Chrome と Firefox の仕組みです。したがって、次のコードは、すべての主要なブラウザ間で一貫したユーザー エクスペリエンスをもたらすはずです。
document.title = myTitle;
history.pushState( myState, myTitle, myURL );
このコードはドキュメントのタイトルも更新し、Chrome と Firefox はこれを使用することになっています。
ただし、期待どおりに動作せず、奇妙な off-by-one バグが発生します。(これは、少なくともバージョン 45 までの FF と Chrome 51 に当てはまります。) 問題は、UI がすぐに更新されず、JS コール スタックが空になった後にのみ更新されることです。したがって、pushState
ドキュメントの新しいタイトルがまだ DOM に適用されていないため、古い (古い) タイトルが引き続き使用されます。このコード スニペットの次の呼び出しでpushState
は、以前に変更されたタイトルなどが使用されます。
ユーザーが履歴からアイテムを選択すると、各履歴エントリのラベルと履歴エントリの実際の宛先が 1 つずれているため、ユーザーは予想とは異なるページに誘導されます。
ただし、これは Chrome と Firefox のバグのように見えます。UI は JS の終了後にのみ更新されpushState
ますが、新しいタイトルは既に使用されているはずです。Chromium と Mozilla の両方にバグ レポートを提出しました。