2014-06-26 138 views
5

现在这里已经找到了一个公平的位置,所以我想我正在寻找一个解释而不是解决方案(虽然这将是王牌),但Safari的后退/前进缓存是可怕的贪婪。Safari和贪婪的贪婪缓存

我有一个表单提交的问题,但在移动到表单操作页面之前加载了插页式模式窗口。在Safari上,缓存非常强大,后退按钮的模式仍处于开启状态,这使得我的灵魂非常难过。

我是通过解散模态然后提交表单来窃取它。在浏览器上有一个半关闭的模式(它是Bootstrap,因此它会消失),然后进行解散。

现在我知道onunload =“”但刷新页面似乎很疯狂。缓存是一件好事,你想要的东西,特别是在手机上。

我想我的问题是:

为何如此激烈得多不如说Chrome和反正是有强制浏览器缓存的状态,而不是刚刚过去的状态吗?

谢谢

+0

在解除模式之前不能禁用淡入淡出效果,然后在重新显示页面时重新启用它吗? – CupawnTae

+0

是的,这就是发生了什么。有一些AngularJS指令并发症。 – SpaceBeers

回答

3

哈,贪婪是轻描淡写!老实说,99%的时间,Safari后面的caching设计是处理移动设备上页面转换的理想方式。当你从页面跳转到页面然后返回到页面时,你不希望通过获取资源和资源来增加设备负载(带宽,电池寿命),当你可以“暂停”时在相互作用之间进行状态转换,然后当你回溯时“继续”它。

这就是Safari Mobile所做的。他们使用Page Cache的概念,当您从一个导航到另一个导航时,它将整个页面保存在内存中。这减少了获取这些资源的需求,并且在点击后可以进行灵活的交互。

这很棒,所有......但它确实会导致问题(例如您提出的问题) - 具体来说,您如何区分被暂停的页面和应该销毁的页面?

谢天谢地,WebKit提供了一个pageshowpagehide事件,该事件分为Page Cache。除了在页面显示或隐藏时触发(类似于onunload),它还可以很好地指示页面是否为persisted - 或放置在页面缓存中。

虽然这不是一个完美的解决方案,但您可以检查pageshow事件的持久性,然后更直接地处理模式(因为您知道它已被缓存),就像立即隐藏它一样。

如果您还没有准备好,就来看看这两个环节在这里:

https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/ https://www.webkit.org/blog/516/webkit-page-cache-ii-the-unload-event/

他们做了伟大的工作,解释的页面高速缓存和包括pageshowpagehide事件的代码示例我之前提到过。

希望这会有所帮助!

+0

真的很有帮助。谢谢。解决了我的问题,但在一个讨厌的庄园。 – SpaceBeers