2011-05-30 3 views

Répondre

54

Non, localStorage et sessionStorage sont tous deux indéfinis dans un processus de travail sur le Web.

Vous devrez rappeler postMessage() au code d'origine du travailleur, et avoir ce code stocker les données dans localStorage. Fait intéressant, un web pouvez utiliser un appel AJAX pour envoyer/récupérer des informations vers/depuis un serveur, ce qui peut ouvrir des possibilités, en fonction de ce que vous essayez de faire.

81

travailleurs Web n'ont accès à ce qui suit:

  • XMLHttpRequest
  • Cache Application
  • créer d'autres travailleurs web
  • objet navigateur
  • objet emplacement
  • méthode setTimeout
  • Méthode clearTimeout
  • méthode setInterval
  • méthode clearInterval
  • importScripts méthode
  • JSON
  • Travailleur

Les objets de fenêtre ou de parents ne sont pas accessibles à partir d'un travailleur Web, vous ne pouvez donc pas accéder au localStorage.

Pour communiquer entre window et workerglobalscope, vous pouvez utiliser la fonction postMessage() et l'événement onmessage.

L'accès au DOM et à la fenêtre ne serait pas sûr pour les threads, puisque le thread fils aurait les mêmes privilèges que son parent.

+11

il peut cependant accéder à indexedDB. –

+2

Et la sécurité des threads n'est pas un problème pour localStorage, car il doit déjà fournir un accès synchronisé pour accueillir plusieurs onglets de navigateur qui y accèdent en même temps. http://stackoverflow.com/questions/22001112/is-localstorage-thread-safe – Thilo

+0

Un travailleur Web ne peut pas toujours créer d'autres travailleurs Web (par exemple, Chrome ne prend pas en charge cette fonctionnalité) ... Cochez une question et des réponses à ce sujet * * [ici] (http://stackoverflow.com/questions/9259251/unable-to-create-web-worker-from-inside-webworker-in-chrome) **. – Wilt

20

Vous pouvez utiliser IndexedDB dans WebWorkers qui est un moyen de stocker des éléments localement dans un magasin de valeurs clés. Ce n'est pas la même chose que localStorage, mais il a des cas d'utilisation similaires et peut contenir beaucoup de données. Nous utilisons IndexedDB dans WebWorkers à mon travail.

+1

Je ne vois pas pourquoi cela a été voté alors je l'ai voté pour qu'il revienne à zéro. LocalStorage ne peut pas être utilisé dans un webworker et si vous avez besoin de stockage dans le navigateur, IndexedDB est l'alternative qui fonctionne dans un worker. – Pajn

+2

actuellement indexéDB n'est pas accessible dans un travailleur Web sur Safari – youurayy

Questions connexes