两个陈述window['localStorage']
和window.localStorage
未定义
在文件系统上运行网站时,localStorage是否已禁用?
PS。我在一个托管该网站的Windows 7手机上运行该网站在isolatedStorage。
答案 0 :(得分:23)
是的,IE9不支持本地文件的localStorage。不在我能找到的任何官方文档中,但同样的问题是described in this blog。
您必须在外部托管网站,或者找到一些其他方法来保存数据。 [无论如何,支持HTML5风格的本地存储在许多浏览器中仍处于测试阶段。特别是对于本地文件系统上的页面。]
您可以尝试使用userdata行为,这是Microsoft为Internet Explorer开发的W3C之前的解决方案。但不确定它是否支持本地文件系统。链接:
答案 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
我更喜欢第一个因为它更小更简单。