Предотвратить Chrome (и другие) Браузер Rememeber Положение прокрутки на странице загрузки - PullRequest
0 голосов
/ 20 октября 2018

Я дергаю за волосы здесь.Chrome имеет раздражающую привычку запоминать положение прокрутки страницы при загрузке ранее просмотренной страницы.Это очень нежелательно для моего веб-приложения, но что бы я ни пытался, я не могу помешать Chrome сделать это.Моя среда тестирования находится на виртуальной коробке Linux Ubuntu с Chrome.Я разработал один хак, который ждет около 600 мс после загрузки страницы, прежде чем вручную устанавливать положение прокрутки в верхней части страницы, но это заставляет время загрузки страницы казаться на 600 мс больше, чем должно быть, что отстой.Вот мой взлом, который работает

// hide the whole document, then show it after delay
$('#iContainer').addClass('cDispHide')
setTimeout(function(){
    window.scrollTo(0, 0);
    $('#iContainer').removeClass('cDispHide');
}, 600 );

После некоторых исследований в Интернете, вот все, что я попробовал

  1. Я поместил это в теги сценария прямо перед включением jQuery

    if ('scrollRestoration' in history) {
        history.scrollRestoration = 'manual';
    }
    

В chrome предполагается отключить это поведение памяти прокрутки, но это не оказывает никакого влияния.Может быть, я ставлю это не в том месте?

поместите это в unload:

window.addEventListener('unload', function(e){
    document.body.style.display = 'none';
});

, который должен отключить это поведение, но это не так.Я поместил этот код в функцию jquery $ (window) .load (), и он не имеет никакого эффекта.Я также попытался установить window.scrollTo (0, 0) при выгрузке, но без эффекта

Я пытался поместить

document.location = "#";

внутри $ (window) .load () и $ (document) .ready (), который должен сообщатьбраузер, чтобы загрузить в верхней части страницы, но это не имеет никакого эффекта, несмотря на размещение «#» в моей адресной строке

Я пытался вручную установить window.scrollTo (0, 0), прежде чем делать любой ajax, который уводит меня с текущей страницы, что по-прежнему не влияет на возвращение на страницу.По сути, страница прокручивается до верхней части страницы, выполняет ajax, покидает страницу, и когда я возвращаюсь на страницу, меня отправляют в середину страницы в качестве моей запомненной позиции прокрутки!?!?!?как это имеет смысл.Это похоже на то, что мои настройки window.scrollTo () не влияют на то, что Chrome запоминает в качестве моей позиции прокрутки.

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

Любая помощь с этим будет принята с благодарностью.Спасибо

1 Ответ

0 голосов
/ 20 октября 2018

Argh

Хорошо, извините, несмотря на мое утверждение, что я не настраивал страницу, она была похоронена глубоко в некотором старом коде и фактически выполняется в какой-то внешней библиотеке, которую я использую, так что это было очень сложночтобы обнаружить, но, услышав мой собственный вопрос, тот факт, что он вспомнил что-то еще, заставил меня выглядеть еще тяжелее, и да, действительно, его вручную устанавливали в положение.

Как только я решил это, простодобавлено

$ (html, body) .scrollTop (0)

при загрузке документа.для этого нужно очень короткое время ожидания, например, 20 мс.Также вы можете установить позицию прокрутки при выходе из страницы в 0, если вы хотите, чтобы это также запомнилось.спасибо всем кто посчитал мой Q

...