我创建了一个Web应用并将其添加到我的iPhone主屏幕上。当我切换到另一个应用程序并返回时,iPhone会自动重新加载我的Web应用程序。这破坏了我的应用程序流程。
我该如何防止iPhone重新加载应用程序?
我启用了apple-mobile-web-app-capable元标签以隐藏Safari工具栏,并且不想关闭它。
我创建了一个Web应用并将其添加到我的iPhone主屏幕上。当我切换到另一个应用程序并返回时,iPhone会自动重新加载我的Web应用程序。这破坏了我的应用程序流程。
我该如何防止iPhone重新加载应用程序?
我启用了apple-mobile-web-app-capable元标签以隐藏Safari工具栏,并且不想关闭它。
我刚在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
希望这能对您有所帮助。至少对我来说是这样的,因为我曾经遇到过与您相同的问题。:-)
更新:由于这个答案正在受到负面评价,我添加了这个解释。
你的问题可能不是实际的重新加载,而是当你的 Web 应用程序通过浏览器打开时,移动 Safari 处理用户缓存和 cookie 的方式与将其“安装”为 Web 应用程序到主屏幕时不同。虽然在此处提出使用 localStorage 的解决方案将起作用,但对于可以避免客户端逻辑的大量工作,如果您的服务器已经负责持久化用户会话状态,则可以避免这种情况。30 秒的解决方案就是简单地显式设置会话 cookie 的寿命更长。
这使您能够在设备重新启动之间保持状态完整,因此即使从主屏幕启动时它并不能从技术上停止 Web 应用程序的重新加载,但这是一种轻松的方法来为用户恢复状态,而不会让他/她注意到重新加载 - 在许多情况下,我认为这才是真正的问题。
关于这种策略和代码示例的更详细讨论,请查看以下问题及我的回答:
我发现了一个黑客技巧,测试过在上可行。
打开文件上传窗口,然后切换回主屏幕。
应用程序仍然可以继续工作,在我的情况下音频正在播放并且localStorage
正在更新。
Proofs: https://youtu.be/heehLUhGKYY
注意:当我们搜索时,观察歌曲进度如何变化,这证明应用程序在后台运行。
简短的回答是你无法控制这个问题。有时iOS会在后台保持Web应用程序处于活动状态,而有时它会将其关闭。这完全取决于设备上可用的内存。
因此,你最好的方法是尽量减少重新加载带来的问题。确保你的Web应用程序在从一个视图到另一个视图时更新URL,可以通过更改location.hash
或使用history.pushState()
来实现。这将允许你重新加载用户在切换应用程序之前所在的任何视图。有pagehide
和pageshow
事件可以让你在用户离开你的应用程序时执行代码-利用这个机会在localStorage和/或IndexedDB中存储本地状态,然后在Web应用程序重新打开时再次获取这些数据。