使用postMessage在不同域的iframe中进行localstorage

时间:2012-09-17 23:25:28

标签: javascript html5 browser local-storage

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

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

1 个答案:

答案 0 :(得分:2)

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