2015-08-08 3 views
1

Моя цель здесь - создать функцию Javascript в одностраничном приложении, которое может сказать мне, будет ли обратная кнопка делать что-либо.Где я в списке истории?

Я думал, что window.history.length поможет мне: если длина такая же, как при запуске приложения, вы находитесь в начале, и функция ничего не должна делать.

Но нет. Представьте, что в приложении есть одна внутренняя ссылка, #a. Когда вы запускаете приложение с новой вкладки, браузер находится в #, длина равна 1, и вы знаете, что кнопка «Назад» ничего не сделает. Если вы нажмете #a, вы перейдете на #a, длина будет равна 2, и вы знаете, что кнопка «Назад» будет работать.

Затем, к сожалению, если вы нажмете кнопку «Назад», вы вернетесь к #, но длина по-прежнему равна 2, потому что #a находится в «будущей истории».

Помогите мне. Как узнать, активна ли кнопка «Назад»? Это убивает меня.

(Проблема немного осложняется тем, что в истории может быть URL-адрес с совершенно другого сайта. Для меня это должно рассматриваться как «неактивное», хотя сама кнопка будет сама по себе работа.)

+0

Какие рамки вы используете для своего приложения на одной странице? –

+0

Угловая, но это не имеет значения. Как это делается вообще? – Malvolio

+0

см. Мой ответ для использования $ locationChangeSuccess в угловом –

ответ

0

Предполагая, что пользователи никогда не изменить URL вручную, то единственным способом они навигации являются либо

  • Нажатие на кнопку/ссылку в вашем приложении, или
  • Нажатие на кнопку назад

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

+0

Да, я пытался получить эту работу уже два месяца. Среди других проблем: кнопка перезагрузки. – Malvolio

0

Решение заключается в сохранении изменений маршрута в вашем приложении и сохранении собственной истории состояния. Это происходит из-за следующим:

По соображениям безопасности объект истории не позволяет Непривилегированного кода для доступа к URL, других страниц в истории сессии , но это не позволяет ему перемещаться по история сеансов.

Для этого в угловом режиме вам необходимо использовать событие $ locationChangeSuccess. Смотрите: How to detect browser back button click event using angular? для обнаружения кнопки «Назад», и если ее кнопка «Назад» просто добавляется к массиву, который вы отслеживаете.

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