停止重新加载从iPhone Home Screen启动的Web应用程序

时间:2011-08-03 17:42:50

标签: iphone ios mobile-safari iphone-standalone-web-app

我创建了一个网络应用并添加到我的iPhone主屏幕。当我切换到另一个应用程序并返回时,iPhone会自动重新加载我的网络应用程序。这打破了我的应用流程。

如何阻止iPhone重新加载应用程序?

我启用了支持apple-mobile-web-app的元标记以隐藏Safari工具栏,我不想将其关闭。

4 个答案:

答案 0 :(得分:15)

我刚刚在SO上发现了这个相关的问题:Stop native web app from reloading itself upon opening on iOS

由于它似乎是Safari的限制,因此建议的解决方案是使用Javascript和HTML5 localStorage来保持您的Web应用程序状态。启动Web应用程序后,检查持久状态并加载(如果可用)。

您可以在此处阅读有关在Safari中使用localStorage的信息:http://developer.apple.com/library/safari/#documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007256-CH1-SW1

希望能帮到你。至少它对我有用,因为我遇到了和你一样的问题。 : - )

答案 1 :(得分:1)

我发现了一个受iOS 11.4.1/12.0测试的黑客攻击
打开文件上传窗口,然后切换回主屏幕。
该应用仍然可以正常工作,在我看来,音频正在播放,localStorage正在更新

证明: here

PS。请注意我们搜索歌曲时进度如何变化,证明该应用在后台运行

答案 2 :(得分:-1)

更新,因为这个答案正在收到downvotes,我添加了这个解释。

您的问题可能不是实际的重新加载,但是当您通过浏览器打开Web应用程序时,Mobile Safari会以不同方式处理您的用户缓存和Cookie,而不是将其作为Web应用程序“安装”到主屏幕。虽然这里提出的使用localStorage的解决方案可行,但如果您的服务器已经负责持久保存用户的会话状态,则可以避免客户端逻辑的大量工作。 30秒的解决方案是简单地将会话cookie明确设置为具有更长的生命周期。

这使您可以在设备重新启动之间保持状态不变,因此即使从技术上讲,它不会在从主屏幕启动时停止重新加载Web应用程序,也可以轻松地为用户恢复状态没有他/她注意到重装 - 在很多情况下我怀疑是真正的问题。


有关此策略和代码示例的更详细讨论,请查看这些问题以及我的答案:

答案 3 :(得分:-1)

简短的回答是你无法控制这一点。有时iOS会在后台保持一个Web应用程序活动,有时它会杀死它。这与设备上可用的内存量完全相关。

因此,您最好的方法是尽量减少重新加载带来的问题。通过更改location.hash或使用history.pushState(),确保您的网络应用在您从视图移动到视图时更新网址。这将允许您在切换应用程序之前重新加载用户所在的任何视图。有pagehide and pageshow events允许您在用户离开应用程序时执行代码 - 利用这个机会将本地状态存储在localStorage和/或IndexedDB中,然后在重新打开webapp时再次获取该数据。