【问题标题】:iOS standalone web app cant load new content after upgrade to iOS7iOS 独立网络应用在升级到 iOS 7 后无法加载新内容
【发布时间】:2013-09-28 08:20:40
【问题描述】:

我有一个 JavaScript 应用程序,我在 iPad 上以独立模式(添加到主屏幕)运行。

我已经从 iOS 6 升级到 iOS 7,现在我的应用总是加载相同的内容,它一直在缓存。 即使我在每个应用程序加载时动态加载我的 JS 和 CSS 文件,并使用唯一的时间戳作为参数。我需要它来确保 JS 和 CSS 文件没有被缓存并且它在 iOS 6 中工作。

我尝试了以下方法:

  1. 从主屏幕移除应用程序

  2. 删除 cookie 和网站数据

  3. 重新启动 iPad

  4. 我已将 manifest="manifest.appcache" 删除(然后再次尝试 1 到 3)

  5. 我添加了以下元标记

    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="pragma" content="no-cache">

  6. 由于我在本地开发这个并且该页面是从我的桌面 PC 提供的,我尝试更改我的 PC 的 IP,然后尝试 1 到 3,但它没有解决我的问题。

    李>

所以无论是在 HTML 文件还是 JS 中,我的所有更改都不会出现。

iOS 处理独立应用程序的方式显然发生了一些变化。我错过了什么?

【问题讨论】:

  • 我有类似的问题...看起来苹果不喜欢那些独立的 webapps.. iphone 5 上的全屏需要特殊的 css hack ,在 ios5 和 6 上播放的一些视频在 7 上无法播放,音频流不再工作了......图像上有很多闪烁。还有更多这样的问题。与你的问题无关,但我认为他们只是不想支持免费的 webapps。幸运的是我无法升级我的 ipad 1。但我有时会在其他 ios6+ 设备上测试我的 webapps,但它们无法正常工作。
  • 你是对的!看到苹果正在尽其所能抑制开发人员制作网络应用程序的动力并不是什么新鲜事。我唯一的问题是为什么他们首先支持独立?无论如何,我发现了很多示例,甚至来自开发人员的测试,这些示例显示了独立/Web 应用程序在 iOS7 中的运行情况有多糟糕,并且它们在 iOS6 中运行良好......

标签: javascript html ios caching ios-standalone-mode


【解决方案1】:
  1. 似乎对清单文件进行更改(例如添加版本号)应该会使应用重新加载内容:Mobile Web App not clearing cache properly

  2. 您应该在 CSS 和 JS 网址中添加版本号以解决缓存问题。 例如file.css?v=2

干杯, Z.

【讨论】:

  • 感谢您的回答,但我已经这样做了。尝试通过添加我更改的 # 注释将版本添加到清单文件。此外,我在每次页面加载时动态创建 css 和 js 文件,并在其源代码末尾添加时间戳作为参数,例如 file.css?timestamp=1380270300000
【解决方案2】:

只需删除 HTML 中的清单引用即可。即,不要使用清单文件。

当您使用它时,您的清单文件是否使用正确的 mimetype 提供?

【讨论】:

  • 完成了第一件事的这两件事......但它没有帮助:(
  • 也根本不使用清单,它仍然保存 javascript。
【解决方案3】:

我发现这个 php 脚本可以将正确的 manifest.cache 文件输出到浏览器

我前段时间做的,也许有帮助。

它会自动检查某些文件是否被修改并强制浏览器重新加载新的 manifest.cache。

manifest.php

<?php
header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";
$hashes="";
$dir = new RecursiveDirectoryIterator(".");
foreach(new RecursiveIteratorIterator($dir) as $file){
 if ($file->IsFile()&&$file!="./manifest.php"&&substr($file->getFilename(),0,1)!="."){
  echo $file."\n";$hashes.=md5_file($file);
 }
}
echo "NETWORK:\n";
echo "*\n";
echo "FALLBACK:\n";
echo "online.html fallback.html\n";

echo "# Hash: " . md5($hashes) . "\n";
?>

atm 我无法在 ios 7 上测试

【讨论】:

  • 有趣的方法,但我不再从事该项目,也不在同一家公司,所以我无法测试它:(
【解决方案4】:

手动刷新缓存然后重新加载页面怎么样:

<script>
if(window.applicationCache) {
  applicationCache.onnoupdate = function() { alert("debug: manifest not changed!") };
  applicationCache.onupdateready = function() { location.reload() };
  applicationCache.update();
}
</script>

【讨论】:

    【解决方案5】:

    尝试手动清除缓存。您可以通过设置来做到这一点。

    【讨论】:

      【解决方案6】:

      尝试从主屏幕删除您的应用,然后转到 safari 中的应用 url,但在 safari 中的 url 末尾添加类似 ?v=2 的内容。然后单击“开始”,然后添加到主屏幕。这将确保您从服务器获取 css 和 javascript 的非缓存版本。

      您还可以在 html 中的 javascript 和 css 调用的末尾添加一个随机数。这将确保主屏幕上应用程序的所有未来请求都获得未缓存的 css 和 javascript 版本。

      【讨论】:

        【解决方案7】:

        我找到了这个教程。原来 ios7 将网站数据存储在不同的位置,而不仅仅是在 cookie 和数据部分。

        http://www.imore.com/how-clear-stored-website-data-ios-7-safari

        1. 从 iPhone 或 iPad 的主屏幕启动“设置”应用。
        2. 向下滚动并点击 Safari。
        3. 现在一直滚动到底部并点击高级。
        4. 点击网站数据。请注意,您可以在此处查看 iPhone 或 iPad 网站数据占用了多少空间。
        5. 再次滚动到底部并点击删除所有网站数据。
        6. 再确认一次您想删除所有数据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-04
          • 1970-01-01
          • 2013-09-27
          • 2022-10-05
          相关资源
          最近更新 更多