防止缓存 iPhone Web 应用程序重新加载(滚动到顶部)
Posted
技术标签:
【中文标题】防止缓存 iPhone Web 应用程序重新加载(滚动到顶部)【英文标题】:Prevent cached iPhone webapp from reloading (scrolling to top) 【发布时间】:2011-03-18 01:37:22 【问题描述】:我有一个使用缓存清单离线工作的 iPhone 网络应用。我将 webapp 添加到我的主屏幕,使用它(比如滚动到页面上的某个位置),然后返回主屏幕。 当我再次打开该应用程序时,我看到了我曾经所在的位置(在该页面上的滚动位置),但随后应用程序“重新加载”并且我被滚动到主页的顶部。有没有办法防止这种“重新加载”?即使在飞行模式下也会发生这种情况(即一切都在缓存中工作)。
【问题讨论】:
这在普通的 Safari 应用程序中总是困扰着我,它总是试图重新加载上一页...... 【参考方案1】:您看到的只是默认启动图像,它只是您上次所在位置的屏幕截图。这不是“重新加载”;应用开始时未加载。
搜索“apple-touch-startup-image”设置真实加载图片。
【讨论】:
啊,所以我离开应用程序的状态被记住了是错觉吗?没有机会在关闭之前实际存储滚动位置? 你也许可以自己把它保存到localStorage:当你开始滚动时,重置一个250ms的计时器;当计时器到期时,保存滚动位置,可能是相对于最近的锚点以考虑页面变化。在加载时恢复它。仅当 window.navigator.standalone 为 true 时才执行这些操作。【参考方案2】:我在这里苦苦挣扎的是,如果我使用常规 Safari 而不是在“apple-mobile-web-app-capable”模式下运行,该应用程序实际上似乎会在“内存中”停留更长时间。在后一种情况下,只需按下主页按钮,然后将任务切换回应用程序就会导致重新加载。在 Safari 中做同样的事情通常不会重新加载。所以我使用“apple-mobile-web-app-capable”会更糟。
【讨论】:
【参考方案3】:我不相信有真正的“重新加载”事件。我们只需要 onload 和 onunload。
onload 处理程序启动时就像您第一次访问该页面一样。
onunload 处理程序是清除旧内容的关键。
我喜欢为重新使用我的网络应用程序的人提供替代内容。
window.onunload=function()
document.getElementsByTagName('body')[0].className+=' unloading'
让 CSS 做一些脏活来隐藏大部分正文并显示替代内容。
(这个答案不依赖jQuery或其他框架)
【讨论】:
【参考方案4】:// 加载中
window.scroll(0,0);
为了确保在启动时不显示旧内容,我在我的页面中使用了这个:
window.addEventListener('unload', function() $('body').hide(); );
因此页面的最后一个状态是空的,当页面再次打开时显示给用户。
【讨论】:
确保应用程序使用缓存清单中的最新文件也是一个好主意:window.applicationCache.addEventListener('updateready', function() window.applicationCache.swapCache(); window. location.reload(true); , false);以上是关于防止缓存 iPhone Web 应用程序重新加载(滚动到顶部)的主要内容,如果未能解决你的问题,请参考以下文章
iPhone Web App Div 标签在 Safari 中重新加载
当我选择操作栏返回时冻结或制作稳定的 Web 视图?防止每次加载/重新加载