单页应用程序:在 Safari OS X 中使用滑动导航时出现可见闪烁

Pet*_*olz 7 javascript safari pushstate single-page-application

我们有一个单页面应用程序(使用 Backbone 构建),用于Backbone.Router处理路由/URL 更改。当路由发生变化时,我们通常会异步加载一些数据,然后渲染页面。当使用后退/前进按钮时,这适用于所有浏览器,包括 OS X 上的 Safari。然而,在 Safari 中,向后或向前导航的滑动(滑动时会显示上一页)会在刚刚导航到的页面和刚刚离开的页面之间短暂闪烁。

给定页面 A 和 B,示例流程为:

  1. 用户加载页面A
  2. 用户点击链接转到页面 B
  3. 用户向后滑动
    1. 滑动时会显示页面 A
    2. 页面 A 重新加载并呈现其内容后,页面 B 短暂闪烁

以下 JS Bin 演示了该问题:http://jsbin.com/tumeka/1 (在此处编辑,因为路由处理与 JS Bin 的编辑链接混淆)。如果路线处理没有延迟(取消选中“延迟”框),则不存在明显问题。

这是 Safari 的错误吗?

我们做错了什么吗?

有解决方法吗?

我使用的是 Safari 6.2,但该问题最初是由使用 Safari 7 的人报告的。