Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript localStorage在Edge中不工作?_Javascript_Local Storage_Microsoft Edge - Fatal编程技术网

Javascript localStorage在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,我不得

我目前正在开发一个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');
您是否还可以检查是否选择了“启用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;';  }