Microsoft Edge:本地/会话存储不能在新选项卡中工作



我正在开发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

最新更新