离线 HTML5 PouchDB 应用程序。多个选项卡会损坏用户数据。如何预防

Offline HTML5 PouchDB App. Multiple tabs will corrupt users data. How to prevent

这个问题是关于 HTML5 离线应用程序的。 This answer 来自 2009 年关于常规网页的内容。

我有一个重量级的 HTML5 PouchDB 离线应用程序。这是一个 AngularJS 应用程序,它编写 to/from 一个 PouchDB。

应用程序需要在没有服务器帮助的情况下处理多个选项卡。

如果用户在两个选项卡中打开我的应用程序,他们将创建竞争条件。

1. tab1 opens docA and edits
2. tab2 opens docA and edits
3. tab1 saves docA
4. tab2 saves docA (overwriting tab1's changes)

我的应用需要优雅地处理这个问题,但如何处理?

一些想法:

  1. 防止同一应用的多个标签页。
    • 我还没有找到一个优雅的解决方案。
  2. onChange 获取来自 PouchDB 的更改通知
    • onChange 会在另一个选项卡中触发吗?
    • 这并没有解决问题,只是早点暴露而已。
  3. 每个选项卡使用不同的 PouchDB,在它们之间同步。
    • 没有解决问题,只是让它成为一个同步问题。
    • 似乎有很多内存。
  4. 文档锁定
    • 复杂onBeforeUnload
    • 如何从未正确卸载的选项卡崩溃中恢复?
  5. 浏览器选项卡 IPC。
    • 打开文档时,询问其他选项卡是否已打开。
    • 我找到的最好的是 using localStorage
  6. 我还没有想到。

有什么建议吗?

这很奇怪,我认为 IndexedDB 在后台自动处理了这个问题。您正在使用 IndexedDB,是吗?您是在许多浏览器中看到这个,还是只是 Chrome?

理想情况下,这不是您要在应用程序代码中修复的问题;它将由 PouchDB 或 IndexedDB/WebSQL 的浏览器实现处理。如果您有可重现的测试用例,最好在 PouchDB 上提交问题。 :)