gpt4 book ai didi

javascript - Chrome扩展: wait for storage.同步获取远程数据

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:58 24 4
gpt4 key购买 nike

我有一个扩展程序可以读取带有时间戳的消息提要并提醒用户注意它们。

我跟踪自用户打开消息以来的最高时间戳,低于该时间戳的任何内容均被“已读”。它运作良好,但当用户安装了多个 Chrome 时,问题就来了:他看到的是他已经在另一台机器上阅读过的项目。

输入 chrome.storage.sync API .我可以设置最高时间戳以在实例之间同步,但这会给我带来竞争条件。

如果我在浏览器启动或从 sleep 中唤醒后立即使用 chrome.storage.sync.get,它将获取陈旧的本地数据并且不会等待同步发生 - 经测试真的。因此,用户仍然会收到警报,即使在警报被清除之前的一小段时间内也是如此 - 这令人困惑。

我可以检测扩展启动,我可以(某种程度上)检测从 sleep 中唤醒。甚至可能是线下/线上事件。 但是接下来我该怎么做才能让 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 不提供任何状态信息或事件,甚至不提供用户是否实际启用了云同步。我提交了几个 feature requests为此,但它们完全被忽略了

  1. 是否有更优雅的解决方案?
  2. 什么是检测唤醒/获取在线事件的可靠解决方案?

最佳答案

这里是存储 API 的作者。我显然没有足够的声誉来回复评论线程。无论如何,同步做它的事情和网络状态/事件肯定不会紧密耦合。即使计算机处于离线状态,同步也会“完成”,但如果计算机在线,则同步可能不会立即“完成”。

像 chrome.storage.onStabilized 这样的事件,在某种形式下,是一个中等频率的请求。但是,除了 Storage API 之外还有一些复杂性。声称已加载同步作为推断计算机之间的障碍的某种方式将是一个误导性的 API。同步服务器不一定以这种方式连接。

例如即使用户已经在计算机 A 上阅读了某些内容,您更新了存储,用户打开了计算机 B,同步表明它已加载......这并不一定保证计算机 A 的更改已完全提交并推送给客户端。

因此,我们通常建议容忍这种不确定性。就像您所做的那样,在积极推断系统状态之前给予一点宽容。也许确实使用 navigator.onLine 作为粗略指标。

关于javascript - Chrome扩展: wait for storage.同步获取远程数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24013718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com