我正在开发Azure托管的Web应用程序。我已经在MS Edge (build 20.10525.0.0)上尝试了它,并得到了以下问题:
我有一个链接与目标_blank打开在一个新的标签页。在此链接的单击事件中,我将一些数据存储在会话存储中。新页面正在检索数据以显示它。在Chrome, Firefox, ie9-10-11下可以正常工作。
在Edge下,存储似乎工作良好。不过,找回来并不总是管用。有时,第一次尝试成功了。有时,它返回null。
我已经尝试使用本地存储而不是会话存储。我也试过使用窗口。而是打开到target_blank。这两种方法都行不通。
谁有什么想法?
我在跨多个选项卡的localStorage中遇到了同样的问题-它只能间歇性地工作,或者根本不工作。我的解决方案是切换到window.indexedDB
(见MDN文档),它在IE10, IE11和MS Edge(在Edge v20.10240上测试)中工作良好。
如果窗口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);
});
})();
然后浏览到。htm