0

在我看来,一个好的单页 Web 应用程序应该尽可能接近(并且明智)传统的 Web 应用程序,后者会在每个用户操作上(重新)加载整个页面。特别是,单页 Web 应用程序应支持浏览器历史记录,包括后退和前进按钮。

大多数单页 Web 应用程序的框架都支持浏览器历史记录。但它们似乎没有模仿一件关键的事情:当我在传统 Web 应用程序的第 1 页并填写表单字段时,导航到应用程序的第 2 页,然后单击返回按钮,浏览器将恢复我的输入。

对于单页 Web 应用程序,通常会发生以下两种情况之一:第 1 页的表单字段仍然是第 2 页上的 DOM(但隐藏)的一部分(或至少是 Javascript 数据结构的一部分),因此导航返回后,应用程序可能会再次向我显示填写的表单字段,或者每次我访问第 1 页时都会重新创建表单字段(通过直接导航或按返回按钮)。在后一种情况下,我以前的输入不会恢复。

显然前者更好。但是即使这个解决方案也不是完美的:在传统的 Web 应用程序中,每个历史记录条目都有自己的表单字段缓存值,即使历史记录多次包含前面提到的第 1 页。单页应用程序不会在每个应用程序内导航中重新创建表单字段,但是,它只为每个表单字段缓存一个值。

解决这个问题并使单页 Web 应用程序更好的一个想法是将表单字段的值存储在HTML5 历史接口的 pushState 和 replaceState 方法的data属性中,以便将它们与其他历史信息一起存储。当然,当前历史条目必须在用户导航离开之前保持更新,因此必须在所有使用 replaceState 更新当前历史条目的表单控件上使用onchange事件处理程序。

现在我的问题是对于上述问题是否有更好的解决方案,以及是否有任何单页 Web 应用程序框架/库来处理它。

4

0 回答 0