我考虑创建一个 webapp。webapp必须能够离线工作并在连接可用时同步数据,所以我认为我应该使用localStorage。
但是,我担心多次在多个选项卡中打开应用程序的用户。我相信这没有合理的用例,但我担心并行访问单个 localStorage 和由此产生的竞争条件。
最简单的方法似乎是实现一次运行行为,因此当用户尝试(相当意外地)第二次打开应用程序时,他们会收到警告,或者理想情况下他们会切换到现有应用程序。我知道这不是 UX 的圣杯,但它可能是 UX 和开发成本之间的合理权衡。但是,我不确定如何正确实施它。也许我可以使用窗口名称,但这看起来很像一个很容易破解的黑客。
或者,我正在考虑一个更高级的变体,它允许同一页面的多个实例,但是:
- 它在它们之间同步数据的本地副本,并
- 它确保只有一个后台同步实例
这看起来像是 ServiceWorkers 的任务,但它们的兼容性是有限的。我最关心的是iOS,它似乎在测试版中对它们有一些新的支持。
我不确定选择哪种方法以及如何正确实施它。我可能会采用看起来更容易的方法,除非它是一个丑陋的黑客或存在一些重大缺陷。
关于此的一些背景:这是一个内部应用程序,预计将由少数用户在自己的设备上使用。所以,我期待各种设备,主要是 Android 和 iOS。它也可以在笔记本电脑上使用。该应用程序只是一个简化的特定于域的界面,用于轻松将数据输入到某些 Google 表格中,该表格用作存储后端。我们可以对应用程序的用户进行一些教育(这就是我认为运行一次限制可以接受的原因),但我们不应该期望他们具备任何 IT 技能。所以我不想依赖用户不打开 webapp 两次。