Невозможно получить доступ к localStorage во второй вкладке при открытии в режиме инкогнито [Mozilla Firefox] - PullRequest
0 голосов
/ 26 июня 2018

Вопрос:

Как создать обходной путь для сохранения состояния между окнами инкогнито в Mozilla?


Описание:

У меня есть приложение, которое зависит от localStorage. Я попал в странную ситуацию, когда пользователь использует приложение в режиме инкогнито. И когда он дублирует окно в режиме инкогнито Mozilla (второе окно).

Свойства в localStorage отсутствуют. Когда он снова дублирует окно (третье окно), мы можем получить доступ к localStorage свойствам.

Это происходит только в приватном окне Firefox, а все остальное работает в Chrome.

Мне нужен обходной путь для этого, а не для использования файлов cookie.


Контрольный пример:

Вот как это воспроизвести.

Откройте этот пример в приватном окне Mozilla. W3 Webstorage Local. Теперь откройте консоль и проверьте, что localStorage дублирует то же самое окно и найдите, что localStorage (Свойства отсутствуют) делают то же самое в третьем окне. может видеть свойства.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Как упомянуто выше, у него нет решения для этого, потому что это логика работы анонимного режима. Однако обходным путем может быть создание отдельного класса сеанса, то есть создание глобального экземпляра при запуске приложения, чтобы клиент не зависел от sessionStorage или подключения к Интернету. Идея состояла бы в том, чтобы запустить глобальный экземпляр сеанса во время аутентификации пользователя, а после этого использовать его через геттер и сеттер для обработки всего, что необходимо. Единственная плохая сторона - это злоупотребление памятью, вы должны всегда очищать то, что вы не используете, и использовать максимально возможную оптимизацию. Я использовал это в некоторых тестовых приложениях с хорошей загрузкой данных (из-за манипулирования 50 тысячами записей), и у меня не было проблем с производительностью, иногда это может помочь вам:)

EX:

// IN TYPESCRIPT

interface CompanyInterface { 
    name: string,
    enable : boolean
}

interface UserInterface {
    name: string,
    age: number,
    company: CompanyInterface
}

interface SessionDataInterface {
    token: string;
    user: UserInterface;
}

class Session {
    private data: SessionDataInterface; 

    public getData(key: string) {
        return this.data[key];
    }

    public setData(key: string, value: any) {
        return this.data[key] = value;
    }

    constructor(token: string | false = false) { 

        if (!token || token.length <= 10) {
            // You Exception.....
        }               
    }
}

// IN JAVASCRIPT

var Session = /** @class */ (function () {
    function Session(token) {
        if (token === void 0) { token = false; }
        if (!token || token.length <= 10) {
            // You Exception.....
        }
    }
    Session.prototype.getData = function (key) {
        return this.data[key];
    };
    Session.prototype.setData = function (key, value) {
        return this.data[key] = value;
    };
    return Session;
}());
0 голосов
/ 26 июня 2018

Выезд PersistJS.

PersistJS - клиентская постоянная библиотека хранения JavaScript.

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

Получил это напрямую от HTMLUI Fact #3


Значения LocalStorage, созданные в режиме «инкогнито», изолируются, когда вы запустить браузер в приватном / инкогнито / безопасном режиме (иногда больше crudely- и accurately- упоминается как «режим порно»), он будет создан новая временная база данных для значений LocalStorage. Это значит что угодно сохраненные в LocalStorage будут уничтожены при приватном просмотре сессия закрыта, что делает LocalStorage вести себя как SessionStorage.

Кроме того, поскольку функция восстановления сеанса в браузере не повторно открыть сеансы в приватном режиме, все, что создано в SessionStorage, будет также будут потеряны после закрытия окна браузера. Действительно, короче говоря, любой данные, помещенные в Local или SessionStorage во время частного сеанса просмотра будет потеряно, как только окно браузера закроется (намеренно или нет).

Ключевое предложение: any data put in Local or SessionStorage during a private browsing session will be lost as soon as the browser window is closed (intentionally or not).

Как ни странно, it's not a bug, it's a feature.

Как указано Hyyan Abo Fakher, вы можете найти ту же информацию в Web Storage API MDN

...