2

同時に発生する2つのバックボーンモデル変更イベントがあります。

  1. change:path現在の履歴状態を置き換え、ページ上のいくつかのリンクにパッチを適用します。
  2. change:language追加のハッシュで新しいパスにリダイレクトする必要があります

リダイレクトは置換状態に優先する必要がありますが、ハッシュが提供されている場合はこれは発生しません。Chromeで動作させるようにしています。

このコードはリダイレクトしません:

// in change:path event
window.history.replaceState({state: 1}, "", "/new_path");

// in change:language event
window.location.replace("/new_path#hash");

しかし、ハッシュがないと、期待どおりに機能します。

// in change:path event
window.history.replaceState({state: 1}, "", "/new_path");

// in change:language event
window.location.replace("/new_path");

ハッシュで動作させる方法はありますか?タイムスタンプを追加して新しいURLを完全に異なるものにすることができることは知っていますが、URLをクリーンにしたいです。

4

2 に答える 2

1

私はそれをそれほどきれいではない方法で解決することができましたが、私はまだより良い解決策を探しています:

// change:path event
window.history.replaceState({state: 1}, "", "/new_path");

// change:language event
setTimeout(function(){
  // make sure it runs after replaceState in change:path
  window.history.replaceState({}, "", "/"); 
  window.location.replace("/new_path#hash");
}, 10);
于 2012-10-31T15:05:45.263 に答える
1

replaceこの方法を使用せずに、場所全体を設定するのが最善の方法のようです。このような:

window.location.href = 'http://www.sitename.com/new_path#hash';
于 2012-10-31T15:06:48.280 に答える