我很好奇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用户脚本,其中避免冲突是一个优先事项.
我有一些关于网络工作者的问题
工人是否可以使用存储空间?例如indexedDB/webSQL和工作者从哪个文件的本地存储?
如何在工作人员中包含文件?我有一个functions.js有很多快速的应用程序相关的功能,它真的没有意义复制粘贴文件的内容在一个工人只有两个不同的地方更新我的功能.
我可以在工作人员中拥有DOM吗?比如在临时音频标签中加载音频文件以读取其持续时间以及是否可播放.不访问父页面的dom,但在worker本身中有一个DOM.
如果任何问题的答案都是否定的,那么如何/应该手动完成?
这适用于Chrome应用,因此我可以访问最新的Chrome API,而且我不需要关心向后兼容性.
javascript html5 google-chrome web-worker google-chrome-extension
我想我错过了一些非常容易的东西.
我正在注册一个服务工作者,通过GCM从我的服务器接收推送通知.这很好用.
不幸的是,我不能传递任何数据和我的推送通知一起,因此,当服务人员接收推,它不知道有这回事.因此,在我显示通知之前,我会回调我的服务器以请求有关推送的其他信息,例如标题,消息和图标.
我的问题是,当我回到我的服务器获取更多信息时,在显示推送之前,我在服务工作者中没有关于请求其他信息的用户的任何信息.为了收集该信息,我需要将用户ID和令牌传递给我的服务器.
所以我的问题归结为:如何从我的core.js代码中获取用户id和令牌变量到服务工作者,以便我可以使用它们从我的服务器收集其他信息?
在我的网络应用程序中,我正在注册服务工作者,如下所示:
core.jsvar 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
我想定期从我的服务工作者调用API来发送存储在localStorage中的数据.当用户浏览我的网站时,将生成此数据并将其保存在localStorage中.考虑一下像在localStorage中保存统计信息并定期通过服务工作者发送它.我该怎么做?我知道我无法从服务工作者访问localStorage,并且必须使用postMessage API.任何帮助将受到高度赞赏.
使用Chrome 17.0.963.46 m,我尝试从Web worker中创建一个新的Web worker.但得到了"未捕获的ReferenceError:工人未定义"
任何信息.在这?(谷歌在网络工作者中创建网络工作者的链接很少令人惊讶)
我一直在尝试在基于webkit的浏览器中使用web sql数据库api.我一直在主ui线程和web worker中使用async api.两个线程都访问同一个数据库(你知道这是sqlite的继承)
一切都表现良好,但偶尔交易丢失或一次交易失败,似乎是时机/竞争条件.似乎对底层sqlite数据库的访问不是线程安全的.
多一点背景.我的Web工作者只是对一个表执行查询,该表可能从主ui线程中插入了一条记录.
我想知道是否实际记录了哪些本地/网络存储可以安全地从ui线程和Web工作线程访问?我已经读过某个地方,indexeddb api是线程安全的,但是这对我现在没有帮助,因为浏览器支持它对于我所针对的浏览器来说很少/不存在(至少我是这么认为的 - 我从http获取我的信息)://caniuse.com)
任何见解都会感激不尽
虽然document无法从网络工作者访问我可以访问一些 cookie 吗?除非我向postMessage主线程发送一个给我 cookie 并且它会通过另一个发送它postMessage