【问题标题】:iOS6 - How to Clear Cache of Homescreen/Standalone Web App?iOS6 - 如何清除主屏幕/独立 Web 应用程序的缓存?
【发布时间】:2012-09-30 18:12:52
【问题描述】:

Apple 似乎改变了 iOS 6 中主屏幕/独立网络应用程序的工作方式。根据各种博客文章 (example),这些应用程序现在拥有自己的专用空间来存储其缓存文件、sqllite dbs、本地存储等,而不是像以前那样与 Safari 浏览器共享。

在iOS 6之前开发的时候,我曾经很虔诚的通过下面的过程来清除缓存...

  1. 从主屏幕中删除应用程序。
  2. 关闭 Safari 中的所有页面/选项卡。
  3. 最后在“设置”>“Safari”中“清除 Cookie 和数据”或“清除数据”。

不幸的是,现在 Apple 已将目标发布到此相同的程序似乎不起作用。清除后,即使我的更改在 Safari 中被提取,当我添加到主屏幕并启动应用程序时,旧的 HTML、JS 等仍然被提取。

有谁知道如何在 iOS 6 中可靠地完全清除缓存?

【问题讨论】:

  • 现在正在经历同样的挫折。希望听到任何更新。
  • 看起来相当持久的问题。您是否尝试设置:<meta content="no" name="apple-mobile-web-app-capable" />?如果不合适,请尝试 appcache 清单:CACHE MANIFEST [newline] NETWORK: [newline] *
  • 您是在开发要清除缓存的应用程序,还是只是一个用户?
  • 我是开发人员,但我还需要提供说明以测试(即最终)用户如何清除他们的缓存。

标签: ios html web-applications


【解决方案1】:

只需将你传递给 webview 的请求设置为 NSURLRequestReloadIgnoringLocalCacheData

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[self.webView loadRequest:request];

【讨论】:

  • 这是一个从 Safari 访问的网络应用程序,而不是使用网络视图的本机应用程序。
【解决方案2】:

目前处理此问题的唯一方法是等待,但有一种解决方法。如果您更改文件名,它将拉取新代码。但是,如果您在缓存清除之前将其更改回旧名称,则将使用旧代码。缓存会定期刷新,最终会更新。我刚刚遇到了一个拒绝更改的 CSS 文件。时间会解决它,但如果您只需要更新它以进行测试,则可以更改名称。

【讨论】:

  • 哪个文件需要改名?如果我更改缓存文件名,会解决所有问题吗?
【解决方案3】:

如果iOS6设备应用了越狱,您可以使用ssh删除文件夹“/private/var/mobile/Library/Caches/com.apple.webapp”的内容。

下次启动网络应用程序时,所有文件都会从网络服务器重新下载。

【讨论】:

    【解决方案4】:

    首先将手机插入电脑,然后打开手机上的网络应用程序和电脑上的 Safari,然后您可以在 Safari 中从菜单“开发>手机名称>应用程序标题”中打开网页检查器(如果您看不到开发菜单,您可以在 Safari 的偏好设置中打开它。

    从那里您可以看到/编辑 cookie 和本地存储,就像您计算机上的网站一样,在检查员集中注意力时按 command+r 将在手机上重新加载应用程序。

    【讨论】:

    • !这就是答案!我有一个正在开发的页面被缓存得很厉害,以至于无法获取缓存清单。
    【解决方案5】:

    我无法验证缓存是否被正确清除,但这对我有用:

    为此,您需要在 iOS 设备上启用 Web Inspector。 转到设置 > Safari > 高级 > Web 检查器(它必须处于活动状态) 而且您必须激活计算机 Safari 上的开发人员菜单。 转到首选项>高级>激活开发人员菜单

    1. 使用 USB 数据线将您的设备连接到计算机
    2. 转到 safari > Developpement > 您的设备名称 > 检查应用程序(该应用程序必须正在运行)
    3. 这将在您的计算机上为网络应用打开检查器
    4. 检查器打开时清除缓存(command + alt + E)
    5. 在检查器仍然打开的情况下刷新计算机上的页面(命令 + R)

    不知何故,Webapp 缓存被清除了,我得到了非缓存代码。

    【讨论】:

      【解决方案6】:

      尝试在任何和所有 href 属性的末尾附加一个唯一的 GET 标记,例如:

      <link rel="stylesheet" type="text/css" href="/css/global.css?
         <?php echo(mt_rand(10000000, 99999999)); ?>
      " />
      

      这将生成href="/css/global.css?########",几乎每次都有不同的数字。这迫使 iOS 的 Safari 将“新”页面拉下,因为它的缓存中没有来自同一个 URI 的数据,而且很可能永远不会有(除非您计划在开发过程中重新加载应用程序数百万次:D)

      【讨论】:

      • 很遗憾,页面的 HTML 内容仍然会被缓存
      • @FranciscoH。虽然这是真的,但您也可以通过将 PHP 标记嵌套在 href、框架、标题等中来将此概念应用于站点上的任何页面。不幸的是,我还没有找到一种方法来使用这种方法来强制一个新的要下拉的索引页的版本。
      • 我尝试了一切,这是唯一有效的解决方案。谢谢!
      【解决方案7】:

      我找到了一个解决方法。只需在网页本身上放置一个链接,以供无法查看新版本的用户使用...

      <a href="javascript:top.frames.location.reload();">refresh</a>
      

      它就像地址栏上的 iPhone/iPad 刷新按钮一样工作!

      【讨论】:

      • 不明白为什么这被否决了......这完美无缺
      • 我几乎尝试了一切,这终于奏效了!虽然其他答案可能对开发人员很有帮助,而且我并不完全清楚 OP 在他提出问题(开发人员或用户)时试图找到解决方案的人,但我敢打赌,用户肯定不会连接到网络检查员清除他们的缓存......所以对于用户观众来说,这非常有效。感谢您的回答!
      • 您也可以通过 true 重新加载以在某些浏览器上强制刷新(我找不到明确的列表,但其中一些列出了 Safari)。
      【解决方案8】:

      您可以在您的计算机上connect your device and open Safari's web inspector 并在控制台选项卡中运行document.location.reload() 以重新加载页面。

      在重新加载之前,您可以按Option+Command+E确保缓存被清除。

      您也可以按 Shift+Command+R 来重新加载没有缓存的页面,但有时它不起作用我。

      【讨论】:

        【解决方案9】:

        这让我发疯了一段时间。尝试清除设备上的缓存 - 不走运。重命名页面确实有帮助,但是一旦你重命名它,你仍然会得到相同的陈旧版本。 昨天找到了解决方案。您需要将设备连接到 Mac 并在 Safari 开发菜单中打开 Web Inspector。进入 Web Inspector 后,只需按 Inspector 工具栏上的“重新加载页面”按钮 - 瞧 - 您会在设备屏幕上看到新版本。

        【讨论】:

          猜你喜欢
          • 2011-12-25
          • 1970-01-01
          • 2012-05-15
          • 2013-09-05
          • 1970-01-01
          • 1970-01-01
          • 2012-09-20
          • 2011-08-02
          • 1970-01-01
          相关资源
          最近更新 更多