History.js onpopstate? - PullRequest
       4

History.js onpopstate?

2 голосов
/ 03 ноября 2011

Я пытаюсь реализовать History.js после обучения использованию History API. Однако мое popstate больше не работает.

Что используется в History.js как onpopstate? В истории API вы используете onpopstate с event.state.

Что мне нужно знать, так это то, что используется в History.js. Это window.onstatechange и что он возвращает?

Ответы [ 4 ]

7 голосов
/ 18 февраля 2012

Вы не можете сказать, что это от толчка или хлопка.Это по своей конструкции.Вы не должны ничего делать до события push.Вместо этого вы должны передать все необходимые данные первому параметру.

History.pushState(data,title,url)

Затем извлечь данные из onstatechange и выполнить некоторые действия.

Проверьте это: https://github.com/browserstate/history.js/issues/47

2 голосов
/ 25 ноября 2011

Базовый пример говорит:

History.Adapter.bind(window,'statechange',function(){ // code });

И этот гист (для jQuery) использует:

$(window).bind('statechange',function(){ // code });
1 голос
/ 03 января 2013

Вы должны использовать событие window.statechange, которое было изобретено History.js, поскольку window.popstate является слишком общим.Вы реагируете на него, привязывая к нему обработчик событий, обычно так:

History.Adapter.bind(window, 'statechange', function () {
    var state = History.getState();
    // Your code goes here
});

Или вы можете использовать абстракцию маршрутизатора, что должно быть проще.Я написал один, например, под названием StateRouter.js .Несколько простых примеров кода:

var router = new staterouter.Router();
// Configure routes
router
  .route('/', getHome)
  .route('/persons', getPersons)
  .route('/persons/:id', getPerson);
// Perform routing of the current state
router.perform();
// Navigate to the page of person 1
router.navigate('/persons/1');

У меня также есть скрипка для демонстрационных целей .

0 голосов
/ 25 сентября 2012

Попробуйте добавить в тело тега следующие два события:

  1. onpopstate="(your code)" -> для браузеров html5
  2. onhashchange="(your code)" -> для браузеров html4

Если у вас возникли проблемы, например, дважды запустить код, попробуйте создать функцию, которая спрашивает, готов ли pushState, и использовать onpopstate.Если нет, в другом случае используйте onhashchange.

...