10

ページのメイン コンテンツを読み込むために AJAX を使用しています。使用history.pushstate(Object:State, String:Title, String:URL)- アドレスバーの URL を更新し、履歴をさかのぼることができます。

ただし、titleパラメーターは効果がないようです。ウィンドウのタイトルも、「履歴リスト」のエントリのタイトルも変更されません (おそらく両方とも同じです)。

私は何を間違っていますか?

更新: titleparam はクロムでは単純に無視されます。http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2010-June/026827.html

4

3 に答える 3

14

titleパラメータはウィンドウのタイトルではありません。状態のタイトルとして使用される場合がありますが、 Chrome
などの一部のブラウザーでは単純に無視されます。

于 2012-12-11T10:03:08.807 に答える
4

@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 の両方にバグ レポートを提出しました。

于 2016-08-08T13:41:38.887 に答える