2012-05-02 9 views
6

私のGoogle-fuは何もプルアップしません。History.pushstateのコールバックはありますか?

あなたがこれを行うとき:

var stateObj = { state: "some state" }; 
history.pushState(stateObj, "page 2", "other.htm"); 

を関連付けられたウィンドウのコールバックがありますか?

私はこれがあることを知っている:

ユーザーが[戻る]ボタンに当たったときに聴くための素晴らしい作品
window.onpopstate = function() { 

} 

。しかし、URLが変わるたびに耳を傾けたいと思います。どうすればよいか分かりません。

URLが変更されるたびにグローバルコールバックがありますか?

+0

http://stackoverflow.com/questions/680785/on-window-location-hash-change – Joe

+0

要素にバインドして、typeof value(typeof elem.onpopstate)をチェックします。未定義の場合はサポートされていません、それはすべての良い機能です。 http://perfectionkills.com/detecting-event-support-without-browser-sniffing/どのように – GillesC

+2

の可能な複製[history.pushState経由で履歴の変更を通知する方法?](http:// stackoverflow。 com/questions/4570093/how-to-get-not-history-of-history-by-history-pushstate) – thekevinscott

答えて

12

いいえ、onpushstateなどはありません。ただし、小さなサルのパッチでは、次のような問題を修正できます。

var pushState = history.pushState; 
history.pushState = function() { 
    pushState.apply(history, arguments); 
    fireEvents('pushState', arguments); // Some event-handling function 
}; 

これは、pushStateを使用する場合にのみ通知します。あなたはおそらくreplaceStateのために同様のことをしたいと思うでしょう。

URLが変わるたびに通知する必要がある場合は、上記とハッシュチェンジハンドラを組み合わせることで、ほとんどの方法が利用できます。

+1

これは何を知っている、[this](http://stackoverflow.com/questions/4570093/how-ヒストリー・プレス・トゥ・ヒストリー・プレスステート)の質問はほぼ同じで、答えもそうです。 :P –

+0

これはどんなトラブルにもつながりますか?例えば。スクリプトをロードするサードパーティのWebサイトでこれを行います。それとも大部分は安全ですか? – Cristian

+0

これがうまくいかない例が見つかりました。たとえば、Backbone.historyでは、 'history.pushState'リファレンスが' Backbone.history.pushState'にコピーされます。 'window.history.pushState'の参照を' = '代入で置き換えると、 'backbone.history.pushState'は古い' pushState'を参照していますので、あなたの猿パッチコードは呼び出されません。 JSのみがリファレンス管理を内蔵していた場合:( – Cristian

関連する問題