2012-01-05 5 views

ответ

3

Согласно этому discussion on github, ожидается поведение history.js

Этот pull request утверждает, модифицировали history.js более рядный с спецификации W3C.

+0

Миллион спасибо. Я лично считаю, что решение history.js лучше. – aWebDeveloper

12

Хотел добавить, да, это ожидаемое поведение History.js. В тоже время Есть more discussions которые критикуют это поведение, так как оно не является стандартом W3C и вызывает некоторую путаницу.

Вкратце, чтобы ответить на ваш вопрос: В функции History.js pushState() есть вызов для изменения состояния в конце.

Поверхность этого решения состоит в том, что вы можете просто изменить (нажать) ваше новое состояние и позволить функции onstatechange() обрабатывать переход. Недостатком является то, что вы не можете обрабатывать исключения/или записывать их в обработчик событий onstatechange.

Я лично предпочитаю способ W3C справиться с этим, так как вы можете различать кнопку «назад/вперед» и «pushState». В History.js Сопровождающие работают на внутреннем решении флага, что позволяет изменить это поведение:

Обратите внимание, как вышеуказанные вызовы [PushState-вызовы] триггер StateChange события, если по какой-то причине вы не хотите чтобы это произошло, внутри обработчика StateChange вы можете использовать следующее:

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

* Эта функция в настоящее время в стадии разработки и может быть использована только с «Dev» версией 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 
    } 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^