Есть ли способ узнать, в каком направлении движется государство с помощью history.js?

Как следует из названия, я хотел бы иметь возможность выполнять другое событие onstatechange, если вызывается функция pushState, вместо функции back. Или, если функция go отрицательна или положительна.

Пример:

если вызывается History.pushState() или History.go(1), я хочу, чтобы обратный вызов события statechange был forwardPushState

если вызывается History.back() или History.go(-1), я хочу, чтобы обратный вызов события statechange был backwardsPushState


person Ascherer    schedule 14.05.2013    source источник
comment
Следите за последней посещенной страницей, если текущая страница перенаправляет на последнюю посещенную страницу, скорее всего, направление обратное.   -  person adeneo    schedule 14.05.2013
comment
Будет лучше, если вы проиллюстрируете это примером. С уважением   -  person Adib Aroui    schedule 15.05.2013
comment
PushState помещает в стек новое состояние (состояние — это некоторые данные, сохраняемые после нового действия). Это не имеет никакого отношения к «назад и вперед». Назад и вперед — это функции для навигации по проталкиваемым состояниям в стеке. Я говорю это, потому что в вашем редактировании похоже, что вы думаете, что pushState и go(1) эквивалентны.   -  person Adib Aroui    schedule 19.05.2013
comment
Я знаю, что это не одно и то же, просто привожу пример того, что я искал.   -  person Ascherer    schedule 20.05.2013
comment
@adeneo, не могли бы вы объяснить подробнее?   -  person Adib Aroui    schedule 21.05.2013
comment
stackoverflow.com/questions/7751263/   -  person    schedule 23.05.2013
comment
Пожалуйста, следите за этой темой, возможно, она будет вам полезна. Там есть ответ о том, как отслеживать событие onstatechange и....stackoverflow.com/questions/16692314/   -  person Adib Aroui    schedule 29.05.2013


Ответы (2)


Состояние — это некоторые данные, относящиеся к странице (как пользователь видит их в браузере). Если пользователь хочет оказаться на определенной странице, эта страница остается неизменной, независимо от того, переходит ли он по нажатию кнопки «Назад» или по нажатию кнопки «Вперед».

PushState помещает новое состояние в стек. Он не имеет отношения к back и go. Back и go — это функции для навигации по помещенным в стек состояниям. Я говорю это, потому что в вашем редактировании похоже, что вы думаете, что pushState и go(1) эквивалентны.

Возможно, если вы хотите узнать, с какой стороны идет пользователь, вам следует проанализировать событие onstatechange, чтобы узнать, принимает ли оно какой-либо параметр, сохраняющий направление, что, по-моему, нетривиальная задача.

Главное, я думаю, это то, что это не имеет никакого отношения к ходу (-1) или go(1) или back.

person Adib Aroui    schedule 18.05.2013
comment
Я понимаю, что pushState и go(1) не одно и то же, это просто пример. К сожалению, на самом деле нет никаких отношений или ссылок, чтобы делать то, что я ищу, поэтому я должен сделать что-то вроде того, что сказал @adeneo. - person Ascherer; 24.05.2013

Может быть, это сработает для вас.

<html>
<body onunload="disableBackButton()">
<h1>You should not come back to this page</h1>
</body>
<script>
function disableBackButton()
{
   window.history.forward();
}
setTimeout("disableBackButton()", 0);
</script>
</html>

Приведенный выше код затруднит использование кнопки «Назад» для загрузки этой страницы.

Вторая попытка

Код ниже был взят из другого переполнения стека.

определить нажатие кнопки "Назад" в браузере

window.onload = function () {
if (typeof history.pushState === "function") {
    history.pushState("jibberish", null, null);
    window.onpopstate = function () {
        history.pushState('newjibberish', null, null);
        // Handle the back (or forward) buttons here
        // Will NOT handle refresh, use onbeforeunload for this.
    };
}
else {
    var ignoreHashChange = true;
    window.onhashchange = function () {
        if (!ignoreHashChange) {
            ignoreHashChange = true;
            window.location.hash = Math.random();
            // Detect and redirect change here
            // Works in older FF and IE9
            // * it does mess with your hash symbol (anchor?) pound sign
            // delimiter on the end of the URL
        }
        else {
            ignoreHashChange = false;   
        }
    };
}

}

person John b    schedule 21.05.2013
comment
Не пытаюсь отключить кнопку «Назад» - person Ascherer; 21.05.2013