现在这已经在这里找到了一点点,所以我想我正在寻找一个解释而不是一个修复(虽然这将是王牌),但Safari的后退/前进缓存是可怕的贪婪。
我遇到了表单提交的问题,但在转到表单操作页面之前加载了插页式模式窗口。在Safari上,缓存是如此强大,以至于后退按钮的模态打开仍然让我的灵魂非常难过。
我通过解雇模式然后提交表单来解决它。在后面,浏览器有一个半封闭的模态(它的引导程序,因此它会消失)然后只是继续解雇。
现在我知道onunload =""但刷新页面似乎很疯狂。缓存是一件好事,也是你想要的东西,特别是在手机上。
我想我的问题是:
为什么它比Chrome更强烈,无论如何强制浏览器缓存状态而不仅仅是最后一个状态?
由于
答案 0 :(得分:4)
caching
设计是处理移动设备上页面转换的理想方式。
当您从Page A
转到Page B
,然后回到Page A
时,您不想让设备负担(带宽,电池寿命)获取资源和资产,当你可以暂停"暂停"互动之间的状态,然后"继续"当你导航回来时。
这实际上是Safari Mobile的功能。他们使用Page Cache
的概念,当您从一个页面导航到另一个页面时,它将整个页面保存在内存中。这减少了获取这些资源的需要,并允许在单击时进行快速交互。
那太棒了......但它确实导致了问题(例如你提到的问题) - 具体来说,你如何区分被暂停的页面和应该被销毁的页面?
值得庆幸的是,WebKit提供了一个pageshow
和pagehide
事件,可以访问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/
他们很好地解释了页面缓存,并包含了我之前引用的pageshow
和pagehide
事件的代码示例。
希望这有帮助!