停止从iPhone主屏幕启动的Web应用程序的重新加载

我创build了一个Web应用程序,并添加到我的iPhone主屏幕。 当我切换到另一个应用程序后,iPhone自动重新加载我的networking应用程序。 这打破了我的应用程序stream。

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

我有苹果手机networking应用程序的元标记启用隐藏Safari工具栏,我不想closures它。

我刚刚在SO上发现了这个相关问题: 在iOS上打开时,停止本机Web应用程序重新加载本身

因为它似乎是Safari的一个限制,所以build议的解决scheme是使用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

希望能帮助你。 至less它是为我做的,因为我和你有同样的问题。 🙂


更新 :虽然我的答案是downvoted,我认为这是处理由iOS强制重新加载的最简单的方法。 我的策略不会阻止Web应用程序在打开时重新加载,但它确实为您提供了一种简单的方法来保持会话处于活动状态,以便您可以从服务器端检测并恢复会话,以便应用程序stream坏了(按照OP的要求)。

NB; 如果您的Web应用程序中的所有页面始终通过相同的URL(例如http://webapp.yourdomain.com/index.php )访问,则此方法最为简单。 如果不是,则需要将用户的位置存储在服务器端的会话数据中,并在用户通过主URLinputWeb应用程序时将用户转发到那里。

如上所述,这使得即使在设备重新启动之后也能保持状态不变,所以即使从技术上来说,从主屏幕启动时web应用程序并没有被重新加载,但在我看来,这是最简单的方法来恢复没有他/她注意到重装的状态。


一个简单的解决scheme是延长会话cookie的生命周期。 这适用于各种networking应用程序(当然,只要它们指向相同的页面),甚至在Web应用程序和应用程序的常规Web版本之间。

由于所有逻辑都保持在服务器端,所以不需要本地存储解决scheme,甚至在设备重启之间也是如此。 每次打开Web应用程序时,仍然会执行HTML请求,但是不会中断应用程序stream,因为服务器只是提供与用户在离开Web应用程序之前所在的内容相同的内容。

诀窍是做到这一点:

// Start or resume session session_start(); // Extend cookie life time by an amount of your liking $cookieLifetime = 365 * 24 * 60 * 60; // A year in seconds setcookie(session_name(),session_id(),time()+$cookieLifetime); 

要更详细地讨论这个策略,你可以看看我对这个问题的回答:

在iPhone上的Web应用程序中维护PHP会话

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

所以,你最好的办法是尽量减less这个重新加载的问题。 确保您的web应用程序在从视图移到视图时更新URL,方法是更改location.hash或使用history.pushState() 。 这将允许您在切换应用程序之前重新加载用户的任何视图。 有一些pagehidepageshow事件可以让用户在离开应用程序时执行代码 – 利用这个机会将本地状态存储在localStorage和/或IndexedDB中,然后在Web应用程序重新打开时再次获取数据。