在iOS上打开时停止本机Web应用程序的重新加载

我正尝试在iOS上使用HTML + JS构build“原生Web应用程序”。 正如你可能知道你可以添加这样一个应用程序的主屏幕,它会或多或less看起来就像一个普通的本地应用程序。

但是,如果我退出这样的应用程序,并再次打开它重新加载整个页面。 从多任务栏切换到另一个应用程序时也会发生这种情况。

这是预期的行为还是有办法阻止设备这样做?

作为一个例子,您可以将jqTouch-Demos从这里添加到主屏幕并对其进行testing: http ://jqtouch.com/preview/demos/main/

你可以在localStorage中保存你的应用程序的状态。 在重新启动时,检查状态是否正在运行,然后将应用程序恢复到最后的状态。

这里同样的问题。 无论如何,如果你不想重新发明轮子,你可以使用像PhoneGap(http://www.phonegap.com/)这样的工具。 原生Web应用程序包装内置访问许多本机function。 此外,你在本地存储应用程序(快速,安全),你当然可以收取;)它是根据BSD或MIT许可证。

你可能想看看使用caching清单,以防止它加载文件。

马特可能在这里有一个很好的写法:

http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/

基本上你把html标签改为这个

<html manifest="cache.manifest"> 

并在服务器上写一个cache.manifest文件,指定哪些文件应该保存在设备caching中,哪些文件应该从networking上dynamic加载。

 CACHE MANIFEST local1.file local2.file NETWORK: network1.php network2.cgi 

您还需要确保您的Web服务器提供带有MIMEtypes文本/清单的.manifest文件,否则这将不起作用。 如果您使用的是Apache,请将以下内容放在.htaccess文件中:

 AddType text/cache-manifest .manifest 

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

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

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


比使用本地存储更容易的解决scheme是延长会话cookie的生命周期。 这适用于各种networking应用程序(当然,只要它们指向相同的页面),甚至在Web应用程序和应用程序的常规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会话