直接从文件系统访问网站时,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 中的本地存储失败的主要内容,如果未能解决你的问题,请参考以下文章

从 onchange 触发 .click() 时 IE9 上出现“SCRIPT5 访问被拒绝”错误

使用 IE9 从 HTTP 获取的页面链接到本地​​文件

js如何读取本地txt文件中的内容

用户访问网站基本流程

简单介绍用户访问网站基本流程

linux使用CGIHTTPServer搭建本地网站