文件协议下的 Javascript/HTML 存储选项 (file://)

IT技术 javascript html local-storage file-uri
2021-03-13 10:47:54

我正在开发一个 html 应用程序,它本质上是一系列页面,就像一本书。在这个应用程序中,我想跨页面存储多个 JavaScript 变量。想想阅读的页面、书签等。当通过 HTTP 查看这个应用程序时,我计划使用 localStorage 和旧浏览器(globalStorage、userData 等)的回退。

但是,如果通过“file://”访问文件(例如从 CD 上查看),则这完全失效。似乎大多数(如果不是全部)localStorage 解决方案在文件协议下不起作用。Cookie 也不是“file://”下的选项。

关于如何在通过“file://”查看时跨 html 页面保留 JavaScript 数据的任何想法?

它实际上只需要在当前用户会话中可用。我真的不想使用框架,但到目前为止,我想不出另一种方法来实现这一点

2个回答

我的一个同事通过分享他使用 window.name 跨单个窗口/会话的页面存储数据的实现来帮助我解决这个问题。

可以在此处找到类似的实现(以及围绕该方法的讨论):http : //ajaxian.com/archives/whats-in-a-windowname

我一直在用这种方法做的初步测试看起来很有希望。我在以下浏览器上的文件协议(从桌面加载页面,又名-“文件:\”)下对此进行了测试。它对所有人都有效!!

  • 浏览器 6
  • 浏览器 7
  • 浏览器 8
  • 浏览器 9
  • FF 3.6
  • FF 4
  • 铬 11
  • 歌剧10
  • 野生动物园 4

我还没有对您可以在这里存储多少数据进行任何测试,但互联网似乎同意 2 MB 的值。

来源、链接、更多信息

我已经制作了一个演示(用于在您从页面移动到页面时保持持久的 sidenav 滚动相同):phrogz.net/tmp/data-through-window.name经测试可与 Chromev21、FFv14、IE8 和IE9http://file://
2021-04-20 10:47:54
很棒的演示!我可能会建议回退到sessionStorage. 如果未来的浏览器版本决定堵塞window.name“漏洞”,这将为您提供一点额外的保险
2021-04-25 10:47:54

在 Webkit (Chromium 12.0.742.21 dev-m) 文件协议上的 localStorage 对我来说很好。

在 Gecko 上有报道,应该很快得到改进。

您甚至可以找到解决方法,但我建议您使用 Chrome nightly build 进行开发。因此,您将来不会浪费时间将其移回 localStorage。

storageSession不同于localStorage还是globalStorage我以为 Gecko 是file://故意把它排除在外的
2021-05-06 10:47:54