Есть ли способ отключить поведение, когда некоторые современные браузеры (Chrome и Safari) запоминают вашу позицию прокрутки на странице обновления?
Отключить автоматическую прокрутку броузера после обновления страницы?
Ответ 1
Для браузеров, поддерживающих history.scrollRestoration, поведение автоматического прокрутки можно отключить:
if ('scrollRestoration' in history) {
history.scrollRestoration = 'manual';
}
источник: https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration
Ответ 2
Вы пытались запустить это после того, как документ готов?
$(document).ready(function(){
window.scrollTo(0, 0);
});
если это не работает...
$(document).ready(function(){
setTimeout(function(){
window.scrollTo(0, 0);
}, 1);
});
Что будет делать это внизу стека вызовов
Ответ 3
не только для хрома, но для всех, я думаю, это будет хорошо работать.
window.onload = function () {
window.scrollTo(0, 0);
};
После обновления вашего вопроса:
Я думаю, что это лучше, если мы используем некоторые файлы cookie или хранилища сеансов.
Ответ 4
Вместо того, чтобы надеяться, что setTimout заканчивается в нижней части стека, я скорее применяю его, чтобы мы попали в нужную позицию прокрутки. Я все еще считаю это хаком, я надеялся на какое-то событие браузера, с которым мы связываемся.
var scrollToYPos = 100;
var interval = setInterval(checkPos, 0);
function checkPos() {
if ($(window).scrollTop() == scrollToYPos) {
clearInterval(interval);
} else {
window.scrollTo( 0, scrollToYPos );
checkPos();
}
}
Ответ 5
Я столкнулся с этой же проблемой. Вот основное решение, которое я придумал:
// scroll the user to the comments section if we need to
wt = win.scrollTop();
wb = wt + win.height();
// if scroll position is 0, do this (it a fresh user), otherwise
// the browser is likely to resume the user scroll position, in
// which case we don't want to do this
yab.loaded().done(function() {
// it seems that browsers (consistently) set the scroll position after
// page load. Accordingly wait a 1/4 second (I haven't tested this to the lowest
// possible timeout) before triggering our logic
setTimeout(function() {
// if the window top is 0, scroll the user, otherwise the browser restored
// the users scroll position (I realize this fails if the users scroll position was 0)
if(wt === 0) {
p = self.container.offset().top;
if(wb != p) {
win.scrollTop(p - th - 20);
}
}
}, 250);
});
Ответ 6
Я думаю, что самым простым способом было бы превратить браузер в перезагрузку, которая, по его мнению, является новой страницей.
window.location = window.location
Все браузеры, которые я тестировал в этом, работают последовательно. Я лично остался бы в стороне от обратных вызовов onload, поскольку они могут вызывать переходы во время загрузки, которые не слишком визуально привлекательны.