Javascript 从webWorker访问本地存储

Javascript 从webWorker访问本地存储,javascript,html,local-storage,web-worker,Javascript,Html,Local Storage,Web Worker,WebWorker可以访问本地存储吗 若否,原因为何?从安全的角度来看,这是否有问题?否,在webworker进程中,localStorage和sessionStorage都未定义 您必须调用postMessage()返回工作者的原始代码,并让该代码将数据存储在localStorage中 有趣的是,webworker可以使用AJAX调用向服务器发送/从服务器检索信息,因此这可能会打开各种可能性,具体取决于您尝试执行的操作。Web Worker只能访问以下内容: 创建其他web工作人员 反对

WebWorker可以访问本地存储吗


若否,原因为何?从安全的角度来看,这是否有问题?

否,在webworker进程中,localStorage和sessionStorage都未定义

您必须调用
postMessage()
返回工作者的原始代码,并让该代码将数据存储在localStorage中


有趣的是,webworker可以使用AJAX调用向服务器发送/从服务器检索信息,因此这可能会打开各种可能性,具体取决于您尝试执行的操作。

Web Worker只能访问以下内容:

  • 创建其他web工作人员
  • 反对
  • 反对
  • 方法
  • 方法
  • 方法
  • 方法
  • 对象(
    标记
    测量
    现在
    方法:)
  • 空气污染指数(见:)
  • 方法
无法从Web worker访问窗口或父对象,因此您无法访问
localStorage

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

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

您可以使用which在键值存储中本地存储内容。它与localStorage不同,但它有类似的用例,可以保存相当多的数据。我们在我工作的WebWorkers中使用IndexedDB

2021年4月9日编辑:

对于使用indexeddb镜像本地存储api但使用异步api而不是可以使用的同步api的最小库。在编写大量数据时,最好使用类似于上述JS中的异步api,因为它允许您不阻塞线程

2020年4月21日编辑:

以下2019年8月的编辑不再适用,它包含了KV存储api的相关信息,KV存储api是一个反映本地存储api的api,该api是异步的,旨在构建在Indexeddb api之上,正如@hoogw指出的那样,KV存储api目前尚未开发,请引用:

[KV strorage]规范的工作目前暂停,因为目前没有浏览器团队(包括发起该提案的Chromium项目)表示有兴趣实施该规范

**2019年8月编辑:** 有一个提议的API可能会在将来的某个时候发布(尽管它目前在Chrome Canary中可用,并且启用了实验性web功能标志)。它被称为KV存储(KV是键值的缩写)。它具有与localStorage API几乎相同的接口,并且将以JavaScript模块的形式提供。它是基于indexeddb API构建的,但有一个简单得多的API。看看网站,这似乎也适用于网络工作者。有关如何使用它的示例,请参见规范的。以下是一个此类示例:

导入存储,{StorageArea}来自“std:kv存储”;
从“/test”导入{test,assert};
测试(“千伏存储测试”,异步()=>{
等待存储。清除()
等待存储。设置(“mycat”、“Tom”);
断言(wait storage.get(“mycat”)==“Tom”,“存储:mycat是Tom”);
const otherStorage=新存储区域(“唯一字符串”);
等待其他存储。清除()
断言(wait otherStorage.get(“mycat”)==未定义,“otherStorage:mycat未定义”);
等待其他存储。设置(“mycat”、“Jerry”);
断言(wait otherStorage.get(“mycat”)==“Jerry”,“otherStorage:mycat是Jerry”);
});
以下是通过Chrome Canary的测试:

尽管无需使用kv存储api,但以下代码是用于上述代码的测试框架:

/./florence-test.js
//Ryan Florence的基本测试框架经过修改以支持异步功能
// https://twitter.com/ryanflorence/status/1162792430422200320
常量锁=异步锁();
导出异步功能测试(名称,fn){
//我们必须锁定,以便在需要时将console.groups分组在一起
//使用异步函数。
等待(锁定常数){
控制台组(名称);
等待fn();
console.groupEnd(名称);
}
};
导出函数断言(cond,desc){
如果(秒){
console.log(“%c✔️", "字体大小:18px;颜色:绿色”,desc);
}否则{
console.assert(cond,desc);
}
};
// https://codereview.stackexchange.com/questions/177935/asynclock-implementation-for-js
函数AsyncLock(){
const p=()=>newpromise(next=>nextIter=next);
var nextIter,next=p();
const nextP=()=>{const result=next;next=result.then(()=>p());返回结果;}
nextIter();
返回Object.assign({},{
async*[Symbol.asyncIterator](){
试试{
产量nextP()
}最后{
nextIter()
} 
}
});
} 
但是,这是一个很好的选择

2019年12月。kvStorage目前不支持,将来也不会在chrome中支持


由于目前没有浏览器团队(包括发起该提案的Chromium项目)表示有兴趣实施该规范,因此该规范的工作目前暂停。

它可以访问indexedDB。而且线程安全与本地存储无关,因为它已经需要提供同步访问以容纳多个浏览器选项卡同时访问它。网络工作者不能总是创建其他网络工作者(例如,Chrome不支持此功能)。。。检查有关此问题的问题和答案。目前,SafariCan上的web worker无法访问indexedDB。我不明白为什么投票被否决,所以我投票被否决,所以它返回到零。LocalStorage不能在webworker中使用,如果需要在浏览器中存储,IndexedDB是在worker中工作的替代方案。目前,在SafariDec,2019年的web worker中无法访问IndexedDB。将来chrome将不支持kvStorage。这个规格是苏