我正在尝试使用iOS上的HTML + JS构建“本机Web应用程序”。您可能知道可以将这样的应用程序添加到主屏幕,它或多或少看起来就像普通的原生应用程序。
但是如果我退出这样的应用程序并再次重新打开它会再次重新加载整个页面。当通过多任务栏从另一个应用程序切换到这样的应用程序时也会发生这种情况。
这是预期的行为,还是有办法阻止设备执行此操作?
作为示例,您可以将jqTouch-Demos从此处添加到主屏幕并对其进行测试:http://jqtouch.com/preview/demos/main/
答案 0 :(得分:10)
您可以在localStorage中保存应用的状态。重新启动时,检查状态是否正在运行,然后将应用程序恢复到最后的状态。
答案 1 :(得分:2)
这里的问题相同。 无论如何,如果你不想重新发明轮子,你可以使用像PhoneGap(http://www.phonegap.com/)这样的工具。本机Web应用程序包装器,内置访问许多本机功能。 此外,您在本地存储应用程序(快速,安全),您当然可以为它收费;) 它是BSD或MIT许可证。
答案 2 :(得分:1)
更新,因为这个答案正在收到downvotes,我添加了这个解释。
您的问题可能不是实际的重新加载,但是当您通过浏览器打开Web应用程序时,Mobile Safari会以不同方式处理您的用户缓存和Cookie,而不是将其作为Web应用程序“安装”到主屏幕。虽然这里提出的使用localStorage的解决方案可行,但如果您的服务器已经负责持久保存用户的会话状态,则可以避免客户端逻辑的大量工作。 30秒的解决方案是简单地将会话cookie明确设置为具有更长的生命周期。
这使您可以在设备重新启动之间保持状态不变,因此即使从技术上讲,它不会在从主屏幕启动时停止重新加载Web应用程序,也可以轻松地为用户恢复状态没有他/她注意到重装 - 在很多情况下我怀疑是真正的问题。
有关此策略和代码示例的更详细讨论,请查看这些问题以及我的答案:
答案 3 :(得分:0)
您可能希望查看使用cache-manifest来阻止它加载文件。
Matt Might在这里写得很好:
http://matt.might.net/articles/how-to-native-iphone-ipad-apps-in-javascript/
基本上你将html标签改为
<html manifest="cache.manifest">
并在服务器上写入cache.manifest文件,该文件指定哪些文件应保存在设备缓存中,哪些文件应从网络中动态重新加载。
CACHE MANIFEST
local1.file
local2.file
NETWORK:
network1.php
network2.cgi
您还需要确保您的Web服务器提供MIME类型为text / manifest的.manifest文件,否则这将无效。如果您正在使用apache,请将以下内容放在.htaccess文件中:
AddType text/cache-manifest .manifest