Сменить location.hash на unbeforeunload

У меня есть страница, которая генерируется с помощью JavaScript. Я хочу хранить $(window).scrollTop() значение в хэше (например, #position=xxx) поэтому, когда страница обновляется и элементы генерируются снова, пользователь может продолжить прокрутку с того места, где он остановился.

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

$(window).on('beforeunload',function(){
    window.location.hash = "position="+$(window).scrollTop();
}).on('load hashchange',function(){
    var scrollregex = /^position=(\d+)$/,
        hash = window.location.hash.substring(1);
    if (scrollregex.test(hash)) $(window).scrollTop(parseInt(hash.match(scrollregex)[1]));
});

Есть ли для этого другое событие или как я могу изменить хэш, когда пользователь запускает обновление?

2 ответа

Решение

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

$(window).on('beforeunload',function(){
    var scrltop = $(window).scrollTop();
    if (scrltop > 0) SStorage.set('position',scrltop);
    else SStorage.del('position');
}).on('load',function(){
    if (SStorage.has('position')){
        var pos = parseInt(SStorage.get('position'));
        if (!isNaN(pos) && $(window).scrollTop() === 0) $(window).scrollTop(pos);
    }
});

Похоже, что Chrome не позволяет обновлять хэш в событии onbeforeunload. У меня была похожая проблема. Я переместил свой код в событие unload, которое работало, но создало другие проблемы. Чтобы решить их, я вынужден перезагрузить, заметьте, перезагрузка не будет работать без setTimeout.

$(window).on('unload', function(){ 
    /* Do hash change here */

    setTimeout(function () { window.location.reload(true); }, 0); 
});
Другие вопросы по тегам