2011-05-30 28 views

Respuesta

54

No, localStorage y sessionStorage no están definidos en un proceso de webworker.

Debería llamar al postMessage() de vuelta al código de origen del Trabajador, y hacer que ese código almacene los datos en localStorage.

Curiosamente, un webworker puede llamar al para enviar/recuperar información a/desde un servidor, por lo que puede abrir posibilidades, dependiendo de lo que esté tratando de hacer.

81

trabajadores web sólo tienen acceso a lo siguiente:

  • XMLHttpRequest
  • caché de la aplicación
  • crear otros trabajadores web
  • navegador de objetos
  • localización de objetos
  • método setTimeout
  • Método clearTimeout
  • método setInterval
  • método
  • clearInterval
  • importScripts método
  • JSON
  • Trabajador

la ventana o los padres los objetos no son accesibles desde un trabajador Web, por tanto, no se puede acceder al almacenamiento local.

Para comunicarse entre la ventana y el workingglobalscope puede usar la función postMessage() y el evento onmessage.

El acceso al DOM y a la ventana no sería seguro para subprocesos, ya que el subproceso secundario tendría los mismos privilegios que su elemento primario.

+11

puede acceder indexDB sin embargo. –

+2

Y la seguridad de subprocesos no es una preocupación para localStorage, ya que necesita proporcionar acceso sincronizado para acomodar múltiples pestañas del navegador que acceden a él al mismo tiempo. http://stackoverflow.com/questions/22001112/is-localstorage-thread-safe – Thilo

+0

Un trabajador web no siempre puede crear otros trabajadores web (por ejemplo, Chrome no es compatible con esto) ... Verifique una pregunta y respuestas sobre esto * * [aquí] (http://stackoverflow.com/questions/9259251/unable-to-create-web-worker-from-inside-webworker-in-chrome) **. – Wilt

20

Puede usar IndexedDB en WebWorkers que es una manera de almacenar cosas localmente en un almacén de valores clave. No es lo mismo que localStorage, pero tiene casos de uso similares y puede contener bastantes datos. Usamos IndexedDB en WebWorkers en mi trabajo.

+1

No se puede ver por qué este voto fue rechazado, así que lo voté por lo que volvió a cero. LocalStorage no se puede usar en un webworker y si uno necesita almacenamiento en el navegador IndexedDB es la alternativa que funciona en un trabajador. – Pajn

+2

actualmente indexedDB no está accesible en un trabajador web en Safari – youurayy

Cuestiones relacionadas