【问题标题】:Prevent cached iPhone webapp from reloading (scrolling to top)防止缓存 iPhone Web 应用程序重新加载(滚动到顶部)
【发布时间】:2011-03-18 01:37:22
【问题描述】:

我有一个使用缓存清单离线工作的 iPhone 网络应用。我将 webapp 添加到我的主屏幕,使用它(比如滚动到页面上的某个位置),然后返回主屏幕。 当我再次打开该应用程序时,我看到了我曾经所在的位置(在该页面上的滚动位置),但随后应用程序“重新加载”并且我被滚动到主页的顶部。有没有办法防止这种“重新加载”?即使在飞行模式下也会发生这种情况(即一切都在缓存中工作)。

【问题讨论】:

  • 这在普通的 Safari 应用程序中总是困扰着我,它总是试图重新加载上一页......

标签: iphone caching scroll web-applications reload


【解决方案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);
      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-30
      • 2016-10-03
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      相关资源
      最近更新 更多