我正试图在iOS上使用HTML + JS构建一个“本地Web应用程序”。 如您所知,您可以将此类应用程序添加到主屏幕上,它看起来或多或少像普通的本机应用程序。
但是,如果我退出这样的应用程序并再次打开它,它会重新加载整个页面。当从另一个应用程序切换到此类应用程序时,也会发生这种情况。
这是预期的行为还是有办法阻止设备这样做?
例如,您可以将jqTouch-Demos从此处添加到主屏幕并进行测试:http://jqtouch.com/preview/demos/main/
我正试图在iOS上使用HTML + JS构建一个“本地Web应用程序”。 如您所知,您可以将此类应用程序添加到主屏幕上,它看起来或多或少像普通的本机应用程序。
但是,如果我退出这样的应用程序并再次打开它,它会重新加载整个页面。当从另一个应用程序切换到此类应用程序时,也会发生这种情况。
这是预期的行为还是有办法阻止设备这样做?
例如,您可以将jqTouch-Demos从此处添加到主屏幕并进行测试:http://jqtouch.com/preview/demos/main/
你可以在localStorage中保存你的应用程序状态。在重新启动时,检查状态是否正在运行,然后将应用程序恢复到其上次运行的位置。
我也遇到了同样的问题。无论如何,如果你不想重复造轮子,可以使用像PhoneGap这样的工具(http://www.phonegap.com/)。它是一个本地Web应用程序包装器,内置许多本地功能。此外,你可以将应用程序存储在本地(快速、安全),当然也可以对其收费;)它基于BSD或MIT许可证。
更新:由于这个回答受到了负面评价,我添加了这个解释。
你的问题可能并不是实际的重新加载,而是当你的Web应用程序通过浏览器打开时,Mobile Safari处理用户缓存和Cookie的方式与在主屏幕上“安装”为Web应用程序时不同。虽然这里提出的使用localStorage的解决方案可以起作用,但它们需要客户端逻辑的大量工作,如果你的服务器已经负责持续保存用户会话状态,那么这些工作是可以避免的。30秒的解决方案是简单地将会话Cookie明确设置为具有更长的生命周期。
这使您能够在设备重新启动之间保持状态完整,因此即使从主屏幕启动时不会在技术上停止Web应用程序的重新加载,这是一种容易的方式来为用户恢复状态,而不让他/她注意到重新加载——在许多情况下,我认为这才是真正的问题。
要获得关于此策略和代码示例的更详细讨论,请查看以下问题及其答案:
http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/
基本上,您需要将HTML标签更改为这个
<html manifest="cache.manifest">
CACHE MANIFEST
local1.file
local2.file
NETWORK:
network1.php
network2.cgi
AddType text/cache-manifest .manifest