Хранилище сеансов не извлекается в мобильном браузере

У меня есть приложение create-response-app, и я храню некоторое состояние внутри sessionStorage, чтобы сохранить некоторое состояние redux во время сеанса пользователя.

В браузерах для настольных ПК все работает нормально, но при отладке на мобильном устройстве в Safari или Chrome состояние не извлекается при обновлении. Это вызывает ошибки, поскольку состояние больше не существует.

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

Вот как я сохраняю и получаю состояние с помощью sessionStorage:

export function saveToLocalStorage(state: AppState) {
    const hasUserProfileId =
        state.system.profile.id && state.system.profile.id !== '';
    try {
        if (hasUserProfileId) {
            const serializedState = JSON.stringify(state);
            sessionStorage.setItem('state', serializedState);
        }
    } catch (error) {
        console.log('Error saving state to local storage');
    }
}

function loadFromLocalStorage() {
    console.log('loadFromLocalStorage - 1');

    try {
        const serializedState = sessionStorage.getItem('state');

        if (serializedState === null) {
            return undefined;
        }
        return JSON.parse(serializedState);
    } catch (error) {
        console.log('Error loading state from local storage');
        return undefined;
    }
}

его ноль при выполнении const serializedState = sessionStorage.getItem('state');, поэтому он возвращает undefined

if (serializedState === null) {
     return undefined;
 }

person dcotter    schedule 28.12.2019    source источник
comment
Проверьте поддержку мобильного браузера.   -  person The Alpha    schedule 28.12.2019
comment
взгляните на этот поток, он может вам помочь: stackoverflow.com/questions/55743941/   -  person Lucas Henrique    schedule 28.12.2019
comment
@LucasHenrique Спасибо за отправку этого потока, который я использовал beforeunload, который не поддерживался. В итоге я использовал прослушиватель событий unload, который поддерживается.   -  person dcotter    schedule 31.12.2019


Ответы (1)


Я использовал прослушиватель событий beforeunload, чтобы сохранить состояние при обновлении. Этот обработчик событий не поддерживался для мобильных браузеров. Замена на unload сработала.

window.addEventListener('unload', () => {
     saveToLocalStorage(store.getState());
});
person dcotter    schedule 31.12.2019