相关疑难解决方法(0)

localStorage线程安全吗?

我很好奇localStorage通过在两个浏览器标签中同时覆盖它来破坏输入的可能性.我应该为本地存储创建互斥吗?
我已经在考虑这样的伪类:

LocalStorageMan.prototype.v = LocalStorageMan.prototype.value = function(name, val) {
  //Set inner value
  this.data[name] = val;
  //Delay any changes if the local storage is being changed
  if(localStorage[this.name+"__mutex"]==1) {
    setTimeout(function() {this.v(name, val);}, 1);
    return null;  //Very good point @Lightness Races in Orbit 
  }
  //Lock the mutext to prevent overwriting
  localStorage[this.name+"__mutex"] = 1;
  //Save serialized data
  localStorage[this.name] = this.serializeData;
  //Allow usage from another tabs
  localStorage[this.name+"__mutex"] = 0;
}
Run Code Online (Sandbox Code Playgroud)

上述功能意味着本地存储管理器正在管理本地存储的一个特定密钥 - localStorage["test"]例如.我想将此用于greasomonkey用户脚本,其中避免冲突是一个优先事项.

javascript multithreading local-storage

21
推荐指数
1
解决办法
6613
查看次数

我可以与Web Workers一起使用什么?

我有一些关于网络工作者的问题

  • 工人是否可以使用存储空间?例如indexedDB/webSQL和工作者从哪个文件的本地存储?

  • 如何在工作人员中包含文件?我有一个functions.js有很多快速的应用程序相关的功能,它真的没有意义复制粘贴文件的内容在一个工人只有两个不同的地方更新我的功能.

  • 我可以在工作人员中拥有DOM吗?比如在临时音频标签中加载音频文件以读取其持续时间以及是否可播放.不访问父页面的dom,但在worker本身中有一个DOM.

  • 如果任何问题的答案都是否定的,那么如何/应该手动完成?

这适用于Chrome应用,因此我可以访问最新的Chrome API,而且我不需要关心向后兼容性.

javascript html5 google-chrome web-worker google-chrome-extension

18
推荐指数
1
解决办法
6748
查看次数

如何将数据(如用户ID)传递给Web工作者以从服务器获取其他推送通知数据?

我想我错过了一些非常容易的东西.

我正在注册一个服务工作者,通过GCM从我的服务器接收推送通知.这很好用.

不幸的是,我不能传递任何数据和我的推送通知一起,因此,当服务人员接收推,它不知道有这回事.因此,在我显示通知之前,我会回调我的服务器以请求有关推送的其他信息,例如标题,消息和图标.

我的问题是,当我回到我的服务器获取更多信息时,在显示推送之前,我在服务工作者中没有关于请求其他信息的用户的任何信息.为了收集该信息,我需要将用户ID和令牌传递给我的服务器.

所以我的问题归结为:如何从我的core.js代码中获取用户id和令牌变量到服务工作者,以便我可以使用它们从我的服务器收集其他信息?

在我的网络应用程序中,我正在注册服务工作者,如下所示:

core.js

var uid = "89123891231239"; // Dummy global id variable
var token = "eo4Dr8qhrFY"; // Dummy global token variable

function setupPushNotifications(){
    console.log("Setting up push notifications");

    if ('serviceWorker' in navigator) {

        navigator.serviceWorker.register('js/pushWorker.js').then(function(reg) {

            console.log(reg);

            reg.pushManager.subscribe({
                userVisibleOnly: true
            }).then(function(sub) {
                console.log('endpoint:', sub.endpoint);
            });

        }).catch(function(error) {
            console.log('Error: ', error);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个看起来像这样的服务工作者:

pushWorker.js

'use strict';

self.addEventListener('install', function(event) {
    self.skipWaiting();
    console.log('Installed', event);
});

self.addEventListener('activate', function(event) {
    console.log('Activated', event);
});

self.addEventListener('push', function(event) {  

    var uid = "EXISTS_IN_CORE.JS"; …
Run Code Online (Sandbox Code Playgroud)

javascript html5 push-notification web-worker google-chrome-app

7
推荐指数
1
解决办法
4358
查看次数

从服务工作者访问localStorage

我想定期从我的服务工作者调用API来发送存储在localStorage中的数据.当用户浏览我的网站时,将生成此数据并将其保存在localStorage中.考虑一下像在localStorage中保存统计信息并定期通过服务工作者发送它.我该怎么做?我知道我无法从服务工作者访问localStorage,并且必须使用postMessage API.任何帮助将受到高度赞赏.

javascript html5 web-worker service-worker

7
推荐指数
4
解决办法
9870
查看次数

无法从Chrome内部的Webworker创建Web Worker

使用Chrome 17.0.963.46 m,我尝试从Web worker中创建一个新的Web worker.但得到了"未捕获的ReferenceError:工人未定义"

任何信息.在这?(谷歌在网络工作者中创建网络工作者的链接很少令人惊讶)

javascript web-worker

6
推荐指数
1
解决办法
2826
查看次数

我可以在浏览器ui线程和Web工作线程中安全地使用html5中的本地存储

我一直在尝试在基于webkit的浏览器中使用web sql数据库api.我一直在主ui线程web worker中使用async api.两个线程都访问同一个数据库(你知道这是sqlite的继承)

一切都表现良好,但偶尔交易丢失或一次交易失败,似乎是时机/竞争条件.似乎对底层sqlite数据库的访问不是线程安全的.

多一点背景.我的Web工作者只是对一个表执行查询,该表可能从主ui线程中插入了一条记录.

我想知道是否实际记录了哪些本地/网络存储可以安全地从ui线程和Web工作线程访问?我已经读过某个地方,indexeddb api是线程安全的,但是这对我现在没有帮助,因为浏览器支持它对于我所针对的浏览器来说很少/不存在(至少我是这么认为的 - 我从http获取我的信息)://caniuse.com)

任何见解都会感激不尽

javascript web-worker local-storage web-sql

6
推荐指数
1
解决办法
1650
查看次数

我可以访问 Web Worker 上的文档 cookie 吗

虽然document无法从网络工作者访问我可以访问一些 cookie 吗?除非我向postMessage主线程发送一个给我 cookie 并且它会通过另一个发送它postMessage

javascript web-worker

3
推荐指数
1
解决办法
3726
查看次数