直接从文件系统访问网站时,IE9 中的本地存储失败
Posted
技术标签:
【中文标题】直接从文件系统访问网站时,IE9 中的本地存储失败【英文标题】:local storage in IE9 fails when the website is accessed directly from the file system 【发布时间】:2012-02-01 02:57:18 【问题描述】:window['localStorage']
和 window.localStorage
两个语句
访问 url “file:///C:/index.html”时未定义
在文件系统上运行网站时是否限制 localStorage?
附言。我正在 Windows 7 手机上运行该网站,该手机在 isolatedStorage 中托管该网站。
【问题讨论】:
HTML5 LocalStorage 需要一个主机名/才能工作。尝试在本地安装 apache 以测试 localhost 【参考方案1】:我也遇到了同样的问题,找到了两个带有后备解决方案的插件:
https://github.com/andris9/jStorage
HTML5 Local Storage fallback solutions
我更喜欢第一个,因为它更小更简单。
【讨论】:
jstorage 用于本地文件时是否有效,而不是服务器上的文件?例如,如果我在 C:\test 有一个使用 jstorage 的文件,那么 jstorage 可以与 IE9 一起使用吗?在***.com/q/24210706/2658159 上查看我的问题。【参考方案2】:作为额外的奖励,IE 将阻止任何解决此问题的尝试。
明智的做法是删除您自己的虚拟 localStorage,这样至少在从本地文件系统加载时您的东西不会损坏:
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 在本地运行时将实际使用。
【讨论】:
有趣的 hack 以避免崩溃。谢谢。但我怀疑是否有任何持久存储替代品可以换入。我希望在哪里。【参考方案3】:是的,IE9 不支持本地文件的 localStorage。在我能找到的任何官方文档中都没有,但同样的问题是 described in this blog。
您必须在外部托管网站,或者找到其他一些持久化数据的方法。 [无论如何,在许多浏览器中,对 HTML5 风格的本地存储的支持仍处于测试阶段。特别是对于本地文件系统上的页面。]
您可以尝试 userdata 行为,这是 Microsoft 为 Internet Explorer 开发的 pre-W3C 解决方案。不过,不确定它是否支持本地文件系统。链接:
-
http://www.javascriptkit.com/javatutors/domstorage2.shtml
http://msdn.microsoft.com/en-us/library/ms531424(VS.85).aspx
参考资料:
-
https://bugzilla.mozilla.org/show_bug.cgi?id=507361
https://***.com/a/7377302/1122351
【讨论】:
谢谢,我去看看你的博客刚刚也找到了这个答案:***.com/questions/3392032/… 是的,也偶然发现了一个类似的问题。 [查看更新的链接]。对不起! 我相信 WebDB、WebStorage 和 IndexDB 有同样的问题你现在有替代 localStorage 的替代品吗?可以使用 file://? 用户数据行为,可能。我已经更新了我的答案。如果这不起作用,你可能会运气不好。是否有机会将网站托管在实际的 Web 服务器上? 也许我可以在我的 WP7 上运行它?在此处将其作为新问题发布:***.com/questions/8706257/…以上是关于直接从文件系统访问网站时,IE9 中的本地存储失败的主要内容,如果未能解决你的问题,请参考以下文章