Safari和它贪婪的贪婪缓存

Spa*_*ers 5 safari caching mobile-safari browser-cache

现在这已经在这里找到了一点点,所以我想我正在寻找一个解释而不是修复(虽然这将是王牌),但Safari的后退/前进缓存是非常贪婪的.

我有一个表单提交的问题,但在转到表单操作页面之前加载一个插页式模式窗口.在Safari上,缓存是如此强大,以至于后退按钮的模态打开仍然让我的灵魂非常难过.

我通过解雇模态然后提交表单来解决它.在后面,浏览器有一个半封闭模式(它的Bootstrap,所以它消失)然后只是继续解雇.

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

我想我的问题是:

为什么它比Chrome更强烈,无论如何强迫浏览器缓存状态而不仅仅是最后一个状态?

谢谢

Jac*_*ack 4

哈哈,贪婪是轻描淡写的!但老实说,99% 的情况下,cachingSafari 背后的设计是处理移动设备上页面转换的理想方式。

当您从 Page 转到APage B,然后返回 Page 时A,您不希望因获取资源和资产而给设备带来负担(带宽、电池寿命),此时您可以“暂停”交互之间的状态,然后“返回时继续”。

这实际上就是 Safari Mobile 所做的事情。他们使用 的概念Page Cache,当您从一个页面导航到另一个页面时,它会将整个页面保留在内存中。这减少了获取这些资源的需要,并允许在单击返回时进行快速交互。

这很好……但它确实会导致问题(例如您提出的问题) - 具体来说,您如何区分已挂起的页面和应该被销毁的页面?

值得庆幸的是,WebKit 提供了一个可利用的pageshow事件。除了在页面显示或隐藏时触发(类似于)之外,它还具有指示页面是否已放入或放入页面缓存的巧妙功能。pagehidePage Cacheonunloadpersisted

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

如果您还没有,请查看这两个链接:

https://www.webkit.org/blog/427/webkit-page-cache-i-the-basics/ https://www.webkit.org/blog/516/webkit-page-cache-ii-the-卸载事件/

他们很好地解释了页面缓存,并包含我之前引用的pageshowpagehide事件的代码示例。

希望这可以帮助!