2012-01-05 16 views

回答

12

想要添加,是的,這是History.js的預期行爲。 同時有more discussions批評這種行爲,因爲它不是W3C標準,並造成一些混淆。

總之,要回答你的問題:在History.js pushState()函數是在最後調用statechange。

該解決方案的上升是,你可以改變(推)你的新狀態,並讓onstatechange()函數處理過渡。 Downside是你無法處理異常/或不得不將它們寫入onstatechange事件處理程序。

我個人更喜歡W3C處理這種方式,因爲您可以區分後退/前進按鈕和pushState。該History.js維護者是在一個內部標誌的解決方案的工作,使您能夠改變這種行爲:

注意一下上面的電話[pushState的通話]觸發statechange事件,如果由於某種原因 你不想給你的statechange 處理程序中,然後發生,你可以使用以下命令:

if (History.getState().internal) { return; } 

*此功能目前正在開發中,只能用History.js的「開發」的版本可以使用!希望這將有助於在未來:)

9

其他一些人試圖現在做到這一點了一天後,我終於找到了解決辦法在這裏:https://github.com/browserstate/history.js/issues/47#issuecomment-25750285

的代碼非常簡單該死,下面是引自鏈接:

當你把你的狀態

History.pushState({ 
    _index: History.getCurrentIndex(), 
    someData: ... 
}, someTitle, someUrl); 

,然後在事件綁定

History.Adapter.bind(window, 'statechange', function() { 
    var currentIndex = History.getCurrentIndex(); 
    var internal = (History.getState().data._index == (currentIndex - 1)); 
    if (!internal) { 
     // your action 
    } 
}); 
相關問題