localStorage 在 Edge 中不起作用?

localStorage not working in Edge?

我目前正在研究一些 JS。它在除 Microsoft Edge 之外的所有浏览器中都可以正常工作。 问题很简单: 在我的一个脚本的开头,我声明了一个变量,如下所示:

var something = localStorage.getItem('something'); 

反正这个something现在还没有,不过大意是这个可以在后面的功能中参考。 Firefox、Chrome、Opera 和 Safari 对此没有问题,但 Edge 有,所以我的问题是,这是一个快速修复方法吗? 或者我是否因为 Edge 而不得不重写我的整个脚本?

这个是edge顺便抛出的错误

 Unable to get property 'getItem' of undefined or null reference

谢谢!

你能试试吗

var something = window.localStorage.getItem('something');

您能否也检查一下您是否选择了 'Enable DOM Storage'?您可以在以下位置找到它: Internet 选项 -> 高级选项卡 -> 安全组框

此外,如果您运行从本地文件系统访问您的页面,localStorage 不能在 IE 上运行,您必须从网络服务器运行它。

Here is a link that provides more information of how to enable it

也许 DOMStorage 已关闭?用这个测试:

if (typeof window.Storage === 'undefined') {
    alert('Storage turned off...');
}

本地存储didn't work for local files in IE9,所以我想在 MS Edge 中仍然是这种情况。

我刚刚在 localhost 上使用服务器在 Edge 中对其进行了测试,您的代码行运行良好:

> var something = localStorage.getItem('something');
> undefined

这可能是早期版本 IE 中的一个安全问题,只是在开发浏览器时从未更新过。

尽管如此,localStorage 和 sessionStorage 似乎在 Edge for HTML files accessed using the 'file://' protocol.

中仍然不起作用

如果有人正在寻找解决方案,旧版本的浏览器也可以存储键值以在页面之间使用。 逻辑可以是

function detectIE() {
            var ua = window.navigator.userAgent;

            var msie = ua.indexOf('MSIE ');
            if (msie > 0) {
                // IE 10 or older => return version number
                return false;
            }

            var trident = ua.indexOf('Trident/');
            if (trident > 0) {
                // IE 11 => return version number
                return false;
            }

            var edge = ua.indexOf('Edge/');
            if (edge > 0) {
                // Edge (IE 12+) => return version number
                return false;
            }

            // other browser
            return true;
        }

然后设置键值使用这样的东西

if (detectIE()) { window.localStorage.setItem('key1', value1);window.localStorage.setItem('key2', value2);}else{ setCookie('key1','value1',1);var value1 = getCookie('key1');}

function setCookie(name,value,days) {
var expires = "";
if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days*24*60*60*1000));
    expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "")  + expires + "; path=/";}

function getCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;}

您也可以删除 cookie

function eraseCookie(name) {   
document.cookie = name+'=; Max-Age=-99999999;';  }