Javascript localStorage在Edge中不工作?
我目前正在开发一个JS。它在除Microsoft Edge之外的所有浏览器中都能正常工作。 问题很简单: 在我的一个脚本的开头,我声明了一个如下的变量:Javascript localStorage在Edge中不工作?,javascript,local-storage,microsoft-edge,Javascript,Local Storage,Microsoft Edge,我目前正在开发一个JS。它在除Microsoft Edge之外的所有浏览器中都能正常工作。 问题很简单: 在我的一个脚本的开头,我声明了一个如下的变量: var something = localStorage.getItem('something'); 无论如何,something还不存在,但其整体思想是,这可以在以后的函数中用作参考。Firefox、Chrome、Opera和Safari在这方面没有问题,但Edge有问题,所以我的问题是,这是一个快速解决方案吗? 还是因为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');
您是否还可以检查是否选择了“启用DOM存储”?您可以在下面找到它:
Internet选项->高级选项卡->安全组框
另外,如果您是从本地文件系统运行页面,那么localStorage在IE上不起作用,您必须从web服务器运行它
可能DOMStorage已关闭?用这个测试:
if (typeof window.Storage === 'undefined') {
alert('Storage turned off...');
}
本地存储,因此我认为MS Edge中的情况仍然如此
我刚刚在Edge中使用localhost
上的服务器对其进行了测试,您的代码行运行良好:
> var something = localStorage.getItem('something');
> undefined
在早期版本的IE中,这可能是一个安全问题,只是在开发浏览器时从未更新过
尽管如此,如果有人正在寻找解决方案,则localStorage和sessionStorage在中似乎仍然不起作用。较旧版本的浏览器也可以用来存储在页面之间使用的键值。 逻辑可能是
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;}
试试看
localStorage['something']
当我在IE中尝试它时,它不会抛出错误。您可以添加更多正在编写的代码吗?您是否在计算机上本地访问该文件?它需要在服务器上。@BhojendraNepal True。但是如果代码具有代表性,它也不应该在我的边缘工作。我不想留下一条唯一的“不起作用”的评论,并鼓励OP返回并查看代码。在此之前,您是否将名为something
的变量设置为本地存储?。使用localStorage.setItem
@Niels,我用更多信息更新了我的答案,请看一看。@VladBezden我尝试过这个,但没有任何运气。我也启用了Cookie。@Niels,您是从本地磁盘运行页面吗(file://...)还是从服务器加载页面?看起来本地存储在本地文件的IE上不起作用。谢谢!去爱微软吧!进一步讨论了这个问题。虽然localStorage对我来说很有用,但在localhost上的IE浏览器中,它也适用于单页应用程序。当我尝试在多个页面上设置和访问该属性时,它的行为出乎意料;它似乎只针对当前url(独立页面)进行更新。最后,我决定只在上网时使用IE进行测试。这一点几乎在5年前就得到了回答。“edge的问题已经解决了吗?”刘易斯说:“没有。我来这里是为了解决问题,发现了这个问题。”。截至撰写此评论时,该评论尚未更新。立即使用最新的边缘。版本84.0.522.59(官方版本)(64位)typeof window.Storage
仍然返回函数
,但调用localStorage抛出。(这很愚蠢,但并不令人惊讶)抱歉,但这增加了不必要的复杂性。您必须以不同的方式获取您的值,并且设置不同。如果您想要本地存储,请坚持使用本地存储。因此,您可以始终使用localStorage.getItem(无论什么)Edge,IE不支持这一点。因此,您必须使用cookie.IDGI:Edge和IE支持基本的本地存储。请参阅:It仅支持最新版本的兼容性图表。使用旧版本的用户如何?因此,使用cookie存储是最佳策略,因此在投票之前,请进行深入思考。我会答应你的。作为SAAS产品,我的公司规定我们只需要支持最新版本(到IE11,它也可以与localStorage一起使用)——谢天谢地。但你们的评论应该更具体,而不是笼统地说“Edge和IE不支持”——这在最近的报道中是不正确的。
function eraseCookie(name) {
document.cookie = name+'=; Max-Age=-99999999;'; }