【问题标题】:Stop native web app from reloading itself upon opening on iOS阻止本机 Web 应用在 iOS 上打开时自行重新加载
【发布时间】:2011-05-16 13:28:26
【问题描述】:

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

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

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

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

【问题讨论】:

标签: ios web-applications iphone-standalone-web-app


【解决方案1】:

更新:因为这个答案收到了反对票,所以我添加了这个解释。

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

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


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

【讨论】:

  • 这不会阻止重新加载,但它会保留会话变量,这似乎是主要问题,而不是它正在重新加载的事实。
【解决方案2】:

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

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

您还需要确保您的网络服务器提供具有 MIME 类型 text/manifest 的 .manifest 文件,否则这将不起作用。如果您使用的是 apache,请将以下内容放入您的 .htaccess 文件中:

AddType text/cache-manifest .manifest

【讨论】:

  • 很好的解释,但遗憾的是它并没有解决多任务时Web应用重新加载和丢失状态的问题。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 我通过创建一个为 iOS 4.2 编译的 WebView 应用程序解决了这个问题,因此支持多任务处理。这对我来说非常有效。
    • 我认为ghenne的建议可能是目前最好的解决方案。
    • 如何保存cookies/会话状态?
    • 没有一个步骤可以做到这一点,除非你有一个非常简单的应用程序。存储一条消息,指示您要在重启时恢复其值的每个全局变量的状态和值。
    • @Chetan:您可以使用下面的策略存储会话 cookie。它不会阻止应用重新加载,但会保持会话处于活动状态(即使在已安装的网络应用和通过 Safari 查看的网站之间)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多