2012-03-10 20 views
0

ajaxナビゲーション付きWebアプリケーションでは、html5の履歴ナビゲーションを利用するつもりです。html5ヒストリーナビゲーション:popstateがトリガーされていないexcepページロード時

しかし、popstateイベントへのバインディングはトリガーされません。

HTML5が可能な場合は(それが正しく検出され、デモがFFとChromeで同様に動作します):

// Callback 
function historyChangeHandler(data) { 
    console.log(data); 
} 

// Bind 
$(window).bind('popstate', historyChangeHandler); 


// Trigger 
$("a").click(function(e) { 
    var url = "/"; 
    // ... 
    console.log("clicked"); 
    history.pushState({url: url}, "", url); 
    return false; 
}); 

動作しないもの:

    それは、ページの読み込みにEXCEP、
  • popstateコールバックのhistoryChangeHandler()は、リンクをクリックしても呼び出されません。つまり、クリックは印刷されますが、イベントは印刷されません。私が試した何

  • 延期のsetTimeoutとpushStateの呼び出し。
  • e.preventDefault();そして
  • はまた、DIV-Sに接続し、返すfalseではなくtrueを返す作業は何

真:

  • historyChangeHandlerは()ページのロード時に呼び出されました。
  • 戻るボタンを押すと、historyChangeHandler()が呼び出されます。
  • historyChangeHandler()は、フォワードボタンのプッシュ時に呼び出されます。
  • コンソールからhistory.pushState({url: "/ test"}、 ""、/ test)を呼び出す場合は、historyChangeHandler()を呼び出してください。

私が見逃している手がかりは?

答えて

1

なぜポップステートイベントが発生する必要がありますか?なぜあなたの機能を呼び出さないのですか?

$("a").click(function(e) { 
    var url = "/"; 
    // ... 
    console.log("clicked"); 
    history.pushState({url: url}, "", url); 
    historyChangeHandler({url: url}); 
    return false; 
}); 
2

popstateは、リンクをクリックしたときに呼び出されることは想定されていません。これは、ユーザーが戻る/進むボタンで移動するときに呼び出されます。

すべてのことが想定どおりに機能しています。

+0

コードを参照すると、リンクをクリックするとpushStateが呼び出されます。なぜなら、それは私がそれを期待しているからです。 – sibidiba

+2

pushStateを呼び出すと、すぐにpopStateをトリガーすると思いますか?それは意味をなさない。あなたが何を期待していても、答えが気に入っているかどうかにかかわらず、それはまだそれが想定されている方法で働いています。 –

関連する問題