【问题标题】:localstorage in iframe of different domain using postMessage使用 postMessage 在不同域的 iframe 中的本地存储
【发布时间】:2012-09-10 05:04:27
【问题描述】:

我的问题与performance setbacks of using localStorage 和可能的解决方法有关。据我了解(我对此不太确定),一旦在页面上看到对 localStorage 的引用(编译时间?),它就会阻塞线程并从磁盘读取数据以填充 localStorage 内存以供参考.或者,如果域过去存储过数据,它可能会在磁盘上查找数据,因此它知道本地存储已经在那里使用。

在任何一种情况下,由于 localstorage api 是同步的,它会阻止线程从磁盘读取,让我们等待数据被读取,然后页面才能执行其他操作。假设我们在页面中插入一个 iframe,该页面以不同的域作为其源动态加载。如果我们按照this post 中的描述使用这个iframe 来通过postMessage 进行所有的localstorage 读写,那么线程不是只有在我们加载iframe 时才会被阻塞吗?这是否为我们提供了使用本地存储的异步方法?还是我完全不在了?

【问题讨论】:

标签: javascript html browser local-storage


【解决方案1】:

由于每个窗口和 iframe 都在单独的浏览器执行上下文中运行(即它们都同时执行)——那么是的,这应该会让你通过 postMessage 异步 localStorage。显然,从不同域加载 iframe 与从同一域加载可能会对系统的安全性产生影响。虽然 postMessage 确实可以跨域工作,但我宁愿从我完全信任的域(即我自己的域)加载这个 iframe。

【讨论】:

  • 对,我了解安全问题,这就是在上面的示例中创建白名单的原因。不过,在不同域上托管 localstorage 会给您带来一些好处:1) 额外的存储空间和 2) 访问使用相同 iframe 访问另一个页面时填充的存储
猜你喜欢
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 2014-07-01
  • 2012-02-02
  • 2011-11-23
相关资源
最近更新 更多