Дэниел Ф. Пупиус описал проблему следующим образом:
Многие сайты ошибаются, и это очень раздражает. Когда пользователь перемещается с помощью кнопок браузера «вперед» или «назад», позиция прокрутки должна быть такой же, как и в прошлый раз, когда он был на странице. Иногда это работает правильно на Facebook, но иногда нет. Google+ всегда теряет позицию прокрутки.
Так что уже есть многочисленные вопросы по сбросу скролла в начало страницы при переходе на новую страницу. Ember.js Cookbook также показывает, как подключиться к Route.activate
:
export default Ember.Mixin.create({
activate: function() {
this._super();
window.scrollTo(0,0);
}
});
Однако это решает только половину проблемы. Когда пользователь использует кнопки назад/вперед, положение прокрутки не будет восстановлено, а просто сброшено.
Есть довольно много попыток решить эту проблему, многие просто сохраняя положение прокрутки внутри экземпляра Ember.Controller
, например, в этом статья. Однако это лишь частичное решение. Если контроллер используется несколько раз, будет сохранено только одно состояние прокрутки.
Как можно сохранить реализацию браузера по умолчанию для восстановления старого состояния прокрутки? Таким образом, ничего не делать, если Route.activate
было вызвано изменением состояния истории html5?