【问题标题】:localStorage not working in Edge?本地存储在 Edge 中不起作用?
【发布时间】:2015-11-29 05:51:10
【问题描述】:

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

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

无论如何,这东西还不存在,但整个想法是,它可以在以后的函数中用作参考。 Firefox、Chrome、Opera 和 Safari 对此没有问题,但 Edge 有,所以我的问题是,这是快速修复吗? 还是因为 Edge 而我不得不重写整个脚本?

这是edge顺便抛出的错误。

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

谢谢!

【问题讨论】:

  • 试试。 localStorage['something']
  • 当我在 IE 中尝试它时,它不会抛出错误。您可以添加更多您正在编写的代码吗?
  • 您是在本地访问计算机上的文件吗?它需要在服务器上。
  • @BhojendraNepal 是的。但如果代码具有代表性,它也不应该在我的 Edge 上运行。我不想留下唯一的“不起作用”评论并为 OP 回去查看代码提供一些激励

标签: javascript local-storage microsoft-edge


【解决方案1】:

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

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

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

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

虽然,localStorage 和 sessionStorage 似乎在Edge for HTML files accessed using the 'file://' protocol. 中仍然不起作用

【讨论】:

  • 谢谢!去爱微软吧!
  • 进一步讨论这个问题。虽然 localStorage 对我有用,但也适用于本地主机上的 IE 浏览器,用于单页应用程序。当我尝试在多个页面上设置和访问该属性时,它的行为异常;它似乎只针对当前 url (单个页面)进行更新。最后我决定我只需要在线时在 IE 中测试。
  • 这已在 5 年前得到解答。边缘问题解决了吗?
  • @LewisMenelaws 遗憾的是没有。我来这里寻求解决方案并找到了这个问题。在撰写此评论时,它似乎没有更新。现在使用最新的边缘。版本 84.0.522.59(正式版)(64 位)
【解决方案2】:

你可以试试

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

您能否检查一下您是否选择了“启用 DOM 存储”?您可以在以下位置找到它: Internet 选项 -> 高级选项卡 -> 安全组框

此外,如果您从本地文件系统运行页面,localStorage 在 IE 上不起作用,您必须从 Web 服务器运行它。

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

【讨论】:

  • 不,一直在说同样的话。
  • 在此之前您是否将名为something 的变量设置为本地存储?使用localStorage.setItem
  • @Niels,我用更多信息更新了我的答案,请看一下。
  • @VladBezden 我已经尝试过了,但没有任何运气。我也启用了 cookie。
  • @Niels,您是从本地磁盘(file://...)运行页面还是从服务器加载页面?看起来 localStorage 在本地文件中的 IE 上不起作用。
【解决方案3】:

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

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;';  }

【讨论】:

  • 抱歉,这增加了不必要的复杂性。你必须以不同的方式获取你的价值,以及不同的设置。如果您想要 localStorage,请坚持使用 localStorage。所以你总是可以使用 localStorage.getItem(whatever)
  • Edge 和 IE 不支持。所以你必须用cookie来实现它。
  • IDGI:Edge 和 IE 支持基本的 localStorage 就好了。请参阅兼容性图表:developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
  • 它只支持最新版本,旧版本的用户呢?所以使用 cookie 存储是最好的策略,所以在否决投票之前要深思熟虑
  • 好的。我会答应你的。作为 SAAS 产品,我的公司规定我们只需要支持最新版本(到 IE11,它也可以与 localStorage 一起使用)——谢天谢地。但是您的评论应该更具体,而不是笼统地“Edge 和 IE 不支持”——最新情况并非如此。
【解决方案4】:

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

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

【讨论】:

  • typeof window.Storage 仍然返回 function 但调用 localStorage 抛出。 (这很愚蠢,但不足为奇。)
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-15
  • 1970-01-01
相关资源
最近更新 更多