IE8开箱即用是否支持'localStorage'?

50

我正在尝试使用HTML5功能localStorage。根据这篇博文,在IE8上可以实现,但是当我尝试使用时,出现了一个JavaScript错误'localStorage为null或不是对象'

所以我的问题是:IE8是否可以直接使用localStorage?以下是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=8" />
    <title>IE8 - DOM Storage</title>
    <script type="text/javascript"> 
        function Save() {
            localStorage.setItem('key','value');            
        }        
    </script>
</head>
<body>        
    <button onclick="Save();">
        Save
    </button>  
</body>
</html>

13
可能与您使用本地文件而不是域名有关,因为 localStorage 依赖于域名。尝试将网页托管在线上。 - Sasha Chedygov
5个回答

56

虽然需要处于IE8模式下(这在IE7模式下不起作用),但它确实支持localStorage

要检查您是否正在使用IE8模式,请打开开发人员控制台。在顶部,确保选择了IE8模式。最好是标准模式。

还有一件事,您需要确保使用HTML5 doctype。您不能在使用XHTML doctype时使用HTML5功能。

<!DOCTYPE html>

使用这个文档类型声明不会影响您的浏览器支持。

另外,确保访问 window.localStorage。这不应该是一个问题,但是IE已知存在一些更奇怪的问题。也许它正在寻找一个本地作用域的 localStorage 对象?谁知道呢。


6
我的研究表明,在IE8的兼容模式下,localStorage能够正常工作。 - Paul Irish
6
当我在Web应用程序中使用它而不是打开硬盘文件时,它有效地工作了。 - Spiderman

7

musicfreak的评论是正确的。

因为这个功能需要域名,所以我只能通过一个实时的url(至少是localhost),而不能从磁盘上打开它作为文件。

没有必要添加window.localStorage,因为IE8也会识别localStorage


这不是正确的注释。IE8确实识别window.localStorage。 - activars
谢谢。我正在尝试使用file://访问,但是无论是window.localStorage还是localStorage都返回undefined。 - manikanta

4

在之前的优秀回答基础上进一步扩展:

我也遇到了同样的问题——更糟糕的是!即使是IE10也无法正常工作!我发现解决办法(对我而言)与Internet Explorer关系不大,而与我的开发环境有关。我创建了一个HTML文件,并使用一个好的文本编辑器进行了大量编辑。 我可以将文件拖放到浏览器中以查看开发页面的进度,并且稍后在文件中更新/编辑各种内容时,只需刷新浏览器窗口即可。

结果发现,对于Chrome、Firefox和Opera来说,window.localStorage是一个有效的对象,但对于Internet Explorer来说,它是“未定义”的(在调试器中可见)。然而,一旦我启动Web服务器程序(针对“localhost”),并使用它向浏览器提供HTML页面,那么Internet Explorer就会为window.localStorage提供一个有效的对象(“DispHTMLStorage”)。同时,请注意,在IE的Tools/Options/Advanced中,有一个复选框“启用DOM存储”——默认情况下似乎被选中,但仍有可能某个用户手动禁用了它。


1
尝试在x-ua-compatible元标记中使用“IE=edge”而不是“IE=8”
来自Microsoft:(link)

使用以下值以EdgeHTML模式显示网页,这是Internet Explorer从IE6到IE11支持的最高标准模式。

<meta http-equiv="x-ua-compatible" content="IE=edge" >

-4

本地存储概念应该在IE8+上工作。

你所要做的就是将源代码放在服务器上并运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接