从webWorker访问localStorage

cio*_*Pep 57 javascript html5 web-worker local-storage

WebWorker可以访问localStorage吗?

如果不是为什么不呢?从安全角度来看,这有问题吗?

小智 95

Web工作者只能访问以下内容:

  • XMLHttpRequest的
  • 应用缓存
  • 创建其他Web工作者
  • 导航器对象
  • 位置对象
  • setTimeout方法
  • clearTimeout方法
  • setInterval方法
  • clearInterval方法
  • importScripts方法
  • JSON
  • 工人

无法从Web worker访问窗口或父对象,因此您无法访问localStorage.

要在窗口和workerglobalscope之间进行通信,您可以使用postMessage()函数和onmessage事件.

访问DOM和窗口将不是线程安全的,因为子线程将具有与其父线程相同的权限.

  • 但它可以访问indexedDB. (13认同)
  • 并且线程安全性不是localStorage的关注点,因为它已经需要提供同步访问以容纳同时访问它的多个浏览器选项卡.http://stackoverflow.com/questions/22001112/is-localstorage-thread-safe (4认同)

Spe*_*net 64

不,localStorage和sessionStorage在webworker进程中都是未定义的.

您必须postMessage()回调Worker的原始代码,并将该代码存储在localStorage中.

有趣的是,webworker 可以使用AJAX调用向服务器发送信息/从服务器检索信息,这可能会打开可能性,具体取决于您尝试做什么.


Joh*_*ohn 34

您可以在WebWorkers中使用IndexedDB,这是一种在密钥值存储中本地存储内容的方法.它与localStorage不同,但它具有相似的用例,可以容纳大量数据.我在WebWorkers中使用IndexedDB.

  • 目前,在Safari上的Web工作者中无法访问indexedDB (4认同)