我正在研究Azure中托管的Web应用程序。我已经在MS Edge(build 20.10525.0.0)上尝试了它并遇到了以下问题。
我有一个指向目标_blank的链接,可以在新标签页面中打开。在此链接的click事件中,我将一些数据存储在会话存储中。新页面正在检索数据以显示它。这在Chrome,Firefox,IE 9-10-11下工作正常。
在Edge下,存储似乎工作正常。想到,检索并不总是有效。有时,第一次尝试有效。有时候,它会返回null。
我尝试使用本地存储而不是会话存储。我也尝试使用window.open代替目标_blank。这两种解决方案都无效。
有人有想法吗?
答案 0 :(得分:3)
我在localStorage中遇到了与多个标签相同的问题 - 它只会间歇性地工作,或根本不工作。我的解决方案是切换到@extend
(参见docs on MDN),它在IE10,IE11和MS Edge中工作正常(在Edge v20.10240上测试)。
答案 1 :(得分:0)
如果窗口A创建了窗口B,则存储事件会触发
尝试使用此代码
创建一个名为a.htm的文件,并在
中添加此脚本(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的文件并添加此脚本
(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
答案 2 :(得分:-3)
使用localStorage而不是sessionStorage。它会起作用。