Доступ к localStorage из webWorker - PullRequest
55 голосов
/ 30 мая 2011

Может ли WebWorker получить доступ к localStorage?

Если нет, то почему?Это проблематично с точки зрения безопасности?

Ответы [ 3 ]

91 голосов
/ 30 мая 2011

Веб-работники имеют доступ только к следующему:

  • XMLHttpRequest
  • Кэш приложения
  • создание других веб-работников
  • объект навигатора
  • объект местоположения
  • метод setTimeout
  • метод clearTimeout
  • метод setInterval
  • метод clearInterval
  • метод importScripts
  • JSON
  • Worker

Окно или родительские объекты недоступны веб-работнику, поэтому вы не можете получить доступ к localStorage.

Для связи между окном и рабочим глобальным масштабом вы можете использовать функцию postMessage() и событие onmessage.

Доступ к DOM и окну не будет потокобезопасным, поскольку дочерний поток будет иметь те же привилегиикак его родитель.

62 голосов
/ 30 мая 2011

Нет, localStorage и sessionStorage не определены в процессе веб-работника.

Вам нужно будет вызвать postMessage() обратно к исходному коду Worker, и этот код сохранит данные в localStorage.

Интересно, что веб-работник может использовать вызов AJAX для отправки / получения информации на сервер или с него, так что это может открыть возможности в зависимости от того, что вы пытаетесь сделать.

31 голосов
/ 18 декабря 2015

Вы можете использовать IndexedDB в WebWorkers , что позволяет локально хранить вещи в хранилище значений ключей. Это не то же самое, что localStorage, но он имеет аналогичные варианты использования и может содержать довольно много данных. Мы используем IndexedDB в WebWorkers на моей работе.

...