Microsoft Edge: локальное/сеансовое хранилище не работает на новой вкладке
Я работаю над веб-приложением, размещенным в Azure. Я пробовал это на MS Edge (build 20.10525.0.0) и получил следующую проблему.
У меня есть ссылка с целевым _blank, чтобы открыть в новой вкладке страницу. В событии клика по этой ссылке я храню некоторые данные в хранилище сеансов. На новой странице отображаются данные для ее отображения. Эта работа отлично работает в Chrome, Firefox, IE 9-10-11.
В Edge хранилище работает нормально. Мысль, поиск не всегда работает. Иногда, первая попытка работает. Иногда он возвращает null.
Я попытался использовать локальное хранилище вместо хранилища сеансов. Я также попытался использовать window.open вместо целевого _blank. Оба этих решения не работают.
У кого-нибудь есть идеи?
Ответы
Ответ 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. он будет работать.