【问题标题】:localStorage access from local file从本地文件访问 localStorage
【发布时间】:2014-09-19 18:16:37
【问题描述】:

我正在创建 2 个 HTML 文件,这些文件将存储在 iPhone 本地并通过 WebView 访问。

我想知道是否可以在一个文件中设置localStorage,并从另一个文件中获取存储结果。

我知道localStorage 可以从同一域上的文件中访问,但是,您似乎无法从不同的本地文件中获取值?

我也尝试在桌面上的 Safari 中使用本地文件运行它,但出现了同样的问题。

【问题讨论】:

  • “本地文件”是指客户端文件吗? JavaScript 没有客户端文件访问权限,无需用户保存/拖动/选择文件。
  • 是的,客户端。但我只是试图从文件访问 localStorage,而不是整个文件本身。 localStorage 是否被视为 HTML 文件的一部分?
  • 看到这个问题:stackoverflow.com/questions/2010892/…。看起来 localStorage 主要用于 cookie 或 key/val 对——而不是用于存储完整文件。话虽如此,您可以通过这种方式存储文件的 content
  • 啊,我错了。您可以使用FileSystem API:stackoverflow.com/questions/4940586/…
  • 这里的主要问题是@TsanyoTsanev 指出的:每个文件都有自己的“域”——这使得 cookie 变得困难。这个 SO 有一些解决方法:stackoverflow.com/questions/3342140/cross-domain-cookies。长话短说:我不这么认为。 : /

标签: javascript html local-storage


【解决方案1】:

当您在本地打开文件时,即使用file:// 协议,到目前为止,浏览器无法确定什么是“相同域”,因此每个文件都被视为一个单独的域。因此,您在打开文件时不能使用localStorage

这里是有关 FireFox 问题的更多信息:https://bugzilla.mozilla.org/show_bug.cgi?id=507361。就我个人而言,我在这个主题上找不到太多关于 Safari 的信息。

你也可以看看这个:Javascript/HTML Storage Options Under File Protocol (file://)。这可能对您的情况有所帮助。

【讨论】:

  • 这在 iOS 10 上不会出现,本地文件通过 WKWebView 呈现
  • 这在 Chrome 上似乎不再适用了。我可以毫无问题地在file://页面上设置本地存储变量,并在关闭并重新打开浏览器后再次读取它们
【解决方案2】:

此时,在 iOS 10 上通过 WKWebView 呈现的本地文件共享对 localStorage 的“同一域”的访问权限。但是,不清楚这是设计使然还是错误。

【讨论】:

    猜你喜欢
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多