30

我正在尝试在 iOS 上使用 HTML + JS 构建一个“本机网络应用程序”。您可能知道,您可以将这样的应用程序添加到主屏幕,它或多或少看起来就像一个普通的原生应用程序。

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

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

例如,您可以将 jqTouch-Demos 从此处添加到您的主屏幕并进行测试:http: //jqtouch.com/preview/demos/main/

4

4 回答 4

10

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

于 2010-12-15T19:39:35.100 回答
2

这里同样的问题。无论如何,如果您不想重新发明轮子,您可以使用 PhoneGap (http://www.phonegap.com/) 之类的工具。本机 Web 应用程序包装器,内置对许多本机功能的访问。此外,您将应用程序存储在本地(快速、安全),您当然可以对其收费;)它在 BSD 或 MIT 许可下。

于 2011-07-08T05:09:01.713 回答
2

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

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

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


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

于 2013-01-30T09:57:06.290 回答
0

您可能想查看使用缓存清单来防止它加载文件。

马特·梅特(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
于 2011-07-15T03:23:11.440 回答