当直接从文件系统访问网站时,IE9中的本地存储失败

时间:2012-01-02 22:33:19

标签: internet-explorer-9 local-storage isolatedstorage

两个陈述window['localStorage']window.localStorage

访问网址“file:/// C:/index.html”

时,

未定义

在文件系统上运行网站时,localStorage是否已禁用?

PS。我在一个托管该网站的Windows 7手机上运行该网站在isolatedStorage。

3 个答案:

答案 0 :(得分:23)

是的,IE9不支持本地文件的localStorage。不在我能找到的任何官方文档中,但同样的问题是described in this blog

您必须在外部托管网站,或者找到一些其他方法来保存数据。 [无论如何,支持HTML5风格的本地存储在许多浏览器中仍处于测试阶段。特别是对于本地文件系统上的页面。]

您可以尝试使用userdata行为,这是Microsoft为Internet Explorer开发的W3C之前的解决方案。但不确定它是否支持本地文件系统。链接:

  1. http://www.javascriptkit.com/javatutors/domstorage2.shtml
  2. http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx
  3. <强>参考文献:

    1. https://bugzilla.mozilla.org/show_bug.cgi?id=507361
    2. https://stackoverflow.com/a/7377302/1122351

答案 1 :(得分:5)

作为一个额外的奖励,IE将打击任何解决此问题的尝试。

理所当然的做法是将你自己的虚拟localStorage存根,以便在从本地FileSystem加载它时至少你的东西不会中断:

if (document.all && !window.localStorage)
{
    window.localStorage = {};
    window.localStorage.removeItem = function () { };
}

在运行之后会弹出什么警报(window.localStorage)的猜测?你猜是“未定义”???

谢谢,IE!现在实际上有一个丑陋的黑客可以做到这一点。由于IE不会让你重复使用它的保留字“localStorage”,我们只会把整个事情移到其他地方:

window.localStorageAlias = window.localStorage;
if (document.all && !window.localStorage)
{
    window.localStorageAlias = {};
    window.localStorageAlias.removeItem = function () { };
}

所以现在,无论你通常说localStorage ['beans'] = 7,你只需要localStorageAlias ['beans'] = 7就可以恢复营业了。当然,从本地文件系统运行时,IE实际上不会在会话之间存储任何内容。但至少它不会破裂。

要获得额外的功劳,您可以修复上述代码,以便在本地运行时交换IE实际上使用的某种形式的持久存储。

答案 2 :(得分:1)

我遇到了同样的问题,发现了两个带有后备解决方案的插件:

https://github.com/andris9/jStorage

HTML5 Local Storage fallback solutions

我更喜欢第一个因为它更小更简单。