2011-05-30 44 views

回答

54

不,localStorage和sessionStorage在webworker進程中都未定義。

您必須將postMessage()調回工人的始發代碼,並讓該代碼將數據存儲在localStorage中。

有趣的是,一個webworker 可以使用AJAX調用來發送/檢索信息到/從服務器,以便可能打開的可能性,這取決於你想要做什麼。

81

網絡工作者只能訪問以下內容:

  • 的XMLHttpRequest
  • 應用程序緩存
  • 創建其他網絡工作者
  • 導航對象
  • 位置對象
  • 的setTimeout方法
  • clearTimeout方法
  • 的setInterval方法
  • clearInterval方法
  • importScripts方法
  • JSON
  • 工人

窗口或父對象不是從Web訪問的工人因此你不能訪問localStorage的。

要在窗口和workerglobalscope之間進行通信,您可以使用postMessage()函數和onmessage事件。

訪問DOM和窗口不會是線程安全的,因爲子線程將具有與其父級相同的權限。

+11

但是它可以訪問indexedDB。 – 2015-07-28 16:38:00

+2

線程安全並不是localStorage關心的問題,因爲它已經需要提供同步訪問來容納同時訪問它的多個瀏覽器選項卡。 http://stackoverflow.com/questions/22001112/is-localstorage-thread-safe – Thilo 2015-08-11 01:49:49

+0

網絡工作者不能總是創建其他網絡工作者(例如,Chrome不支持這一點)...檢查一個關於這個問題的答案* * [這裏](http://stackoverflow.com/questions/9259251/unable-to-create-web-worker-from-inside-webworker-in-chrome)**。 – Wilt 2015-12-11 13:07:46

20

您可以在WebWorkers中使用​​這是在關鍵值存儲中本地存儲事物的一種方式。它與localStorage不同,但它具有相似的用例,可以保存大量數據。在我的工作中,我們在WebWorkers中使用IndexedDB。

+1

看不到爲什麼這是投下來的投票,所以我投了票,所以它回到了零。 LocalStorage不能在webworker中使用,並且如果需要在瀏覽器中存儲的話,IndexedDB是在worker中工作的替代方法。 – Pajn 2015-12-31 13:42:10

+2

當前indexedDB在Safari上的Web工作者中無法訪問 – youurayy 2016-02-25 03:55:12