70

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

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

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

4

4 回答 4

16

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

由于这似乎是 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

希望对您有所帮助。至少它对我有用,因为我和你有同样的问题。:-)

于 2011-08-04T14:56:57.567 回答
0

更新:由于这个答案收到了反对票,我添加了这个解释。

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

这使您即使在设备重新启动之间也能保持状态不变,因此即使从技术上讲它不会阻止从主屏幕启动时重新加载 Web 应用程序,但它是一种为没有他的用户恢复状态的简单方法/她注意到重新加载 - 在许多情况下,我怀疑这是真正的问题。


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

于 2013-01-30T09:54:57.863 回答
0

我发现了一个 hack,在iOS 11.4.1/12.0
打开文件上传窗口进行了测试,然后切换回主屏幕。
该应用程序仍然可以继续工作,在我的情况下,音频正在播放并且localStorage正在更新

证明: https ://youtu.be/heehLUhGKYY

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

于 2018-10-12T23:05:45.027 回答
0

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

因此,您最好的方法是尽量减少此重新加载带来的问题。通过更改location.hash或使用history.pushState(). 这将允许您重新加载用户在切换应用程序之前打开的任何视图。当用户离开您的应用程序时,有一些事件允许您执行代码 - 借此机会将本地状态存储在 localStorage 和/或 IndexedDB 中,然后在重新打开 web 应用程序时再次获取pagehidepageshow数据

于 2017-10-19T15:11:14.293 回答