Подтвердить что ты не робот

Microsoft Edge: локальное/сеансовое хранилище не работает на новой вкладке

Я работаю над веб-приложением, размещенным в Azure. Я пробовал это на MS Edge (build 20.10525.0.0) и получил следующую проблему.

У меня есть ссылка с целевым _blank, чтобы открыть в новой вкладке страницу. В событии клика по этой ссылке я храню некоторые данные в хранилище сеансов. На новой странице отображаются данные для ее отображения. Эта работа отлично работает в Chrome, Firefox, IE 9-10-11.

В Edge хранилище работает нормально. Мысль, поиск не всегда работает. Иногда, первая попытка работает. Иногда он возвращает null.

Я попытался использовать локальное хранилище вместо хранилища сеансов. Я также попытался использовать window.open вместо целевого _blank. Оба этих решения не работают.

У кого-нибудь есть идеи?

4b9b3361

Ответ 1

У меня была такая же проблема с localStorage на нескольких вкладках - она ​​работала бы только с перерывами или вообще не работала. Моим решением было перейти на window.indexedDB (см. docs на MDN), который отлично работает в IE10, IE11 и MS Edge (протестирован на Edge v20. 10240).

Ответ 2

Если окно A создало окно B, то событие хранения получает триггер

попробуйте этот код

создайте файл с именем a.htm и добавьте этот script в

(function() {
    function write(s) {
        var d = document.createElement('div');
        d.innerHTML = s;
        document.body.appendChild(d);
    }

    var w = window.open('','window_b');
    if (w.location.host === '') {
        w.location.href = 'http://localhost/b.htm';
    }

    if (window.localStorage) {
        setInterval(function() {
            var now = (new Date()).toTimeString();
            localStorage.removeItem('date');
            localStorage.setItem('date', now);
            write('fired on ' + now);
        }, 3000);
    }
    else {
        write('local storage not detected!');
    }
})();

создайте файл с именем b.htm и добавьте этот script

(function() {
    function write(s) {
        var d = document.createElement('div');
        d.innerHTML = s;
        document.body.appendChild(d);
    }

    window.addEventListener('storage', function(e) {  
        e.newValue && write('received ' + e.newValue);
    });

})();

то просто перейдите к a.htm

Ответ 3

используйте localStorage вместо sessionStorage. он будет работать.