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