Chrome扩展:等待存储.同步获取远程数据
Chrome extension: wait for storage.sync to get remote data
我有一个扩展,读取带有时间戳的消息的提要并提醒用户。
我跟踪自用户打开消息以来的最高时间戳,低于该时间戳的任何内容都被"读取"。它工作得很好,但当用户安装了几个Chrome浏览器时,问题就开始了:他看到的是他已经在另一台机器上阅读过的内容。
输入"chrome.storage.sync
API"。我可以设置实例间同步的最高时间戳,但这会给我带来竞争条件。
如果我在浏览器启动或从睡眠中唤醒后立即使用chrome.storage.sync.get
,它将获得陈旧的本地数据,而不会等待同步发生-经过测试为真。因此,用户仍然是警报,即使在警报被清除之前的一小段时间-这是令人困惑的。
我可以检测扩展启动,我可以(某种程度上)检测从睡眠中醒来。甚至可能是离线/在线活动。但是我下一步该怎么做才能让Chrome有机会同步数据?一个简单的解决方案是:
var syncSleepTimeout = null;
function getUpAndRunning(){
clearTimeout(syncSleepTimeout);
syncSleepTimeout = null;
doActualWork();
}
// Called upon wakeup/start/online event
function justWokeUp(){
// Give sync a chance to happen
syncSleepTimeout = setTimeout(getUpAndRunning, 3000);
}
chrome.storage.onChanged.addListener(function(changes, area){
if(area === "sync" && syncSleepTimeout) getUpAndRunning();
});
据我所知,chrome.storage.sync
不提供任何状态信息或事件,甚至不知道用户是否实际启用了云同步。我提交了几个类似的功能请求,,但它们完全被忽略了。
- 是否有更优雅的解决方案?
- 检测唤醒/在线事件的健壮解决方案是什么?
存储API的作者。显然,我没有足够的声望来回复评论。无论如何,同步做它的事情和网络状态/事件肯定不会紧密耦合。即使计算机离线,同步也会"完成",但如果计算机在线,则同步可能不会立即"完成"。
像chrome.storage这样的事件。在某种形式下,on稳定化是一个中等频率的请求。不过,除了存储API之外,还有一些复杂的问题。声称同步作为某种推断计算机之间屏障的方式已经加载,这将是一个误导性的API。同步服务器不一定是这样连接的。
。即使用户已经在计算机A上读了一些东西,你更新存储,用户打开计算机B,同步说它已加载…这并不一定保证计算机A的更改已经完全提交并推送给客户端。
因此,我们通常建议容忍这种不确定性。就像您所做的那样,在大胆地推断系统状态之前,请稍作宽宏大量。也许可以使用导航器。在线作为一个粗略的度量。
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 在VanillaJS中模拟模型双向数据绑定
- CSS-如何定位内容数据标题
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- Highcharts系列.数据数据类型限制
- 在jQuery mobile/java脚本的TextBoxes中动态添加未加载的数据.数据具有[object HTMLI
- 严格模式下的图像数据数据分配
- 具有持久数据(数据存储)的Chrome扩展程序
- Java客户端卡在来自nodejs服务器的数据数据流中
- 在gmail线程中从ZIP文件中提取CSV,并将数据写入谷歌表单
- Javascript -定期向服务器发送用户位置数据(多线程)
- 高级javascript源数据-数据表
- 在WebWorker和主线程之间传递二进制数据的最佳实践是什么?
- 在 HTML (SVG) 元素中包含数据/数据密钥
- 在HTML5应用程序中下载后台数据到浏览器数据库- settimeout vs工作线程
- JavaScript 是单线程的吗?如果没有,如何同步访问共享数据