为什么我的iPhone Web应用程序没有缓存并在脱机模式下工作?

时间:2011-01-26 18:08:08

标签: iphone html html5 offline

我正在尝试将iPhone缓存为HTML5 Web应用程序,以便在使用时可以脱机。 Web应用程序位于www.prism.gatech.edu/~gtg880f,我没有成功。我借用它只是为了试一试。

只有3个文件: 的index.html index.js 的style.css

我修改了index.html以包含<html manifest="offline2.manifest"><meta content="yes" name="apple-mobile-web-app-capable" />以便它可以全屏显示为离线网络应用。

我的offline2.manifest文件如下:

CACHE MANIFEST
index.html
index.js
style.css
debug.js

NETWORK:

CACHE:

PS:debug.js来自Jonathan Stark

当我使用firefox时,它会正确缓存它,我可以离线使用Web应用程序。但是,它在chrome和safari中都失败了。

在Chrome中,我收到以下调试消息:

Application Cache Checking event
Application Cache Error event: Invalid manifest mime type (text/plain) http://www.prism.gatech.edu/~gtg880f/offline2.manifest

我用谷歌搜索了明显的mime类型,它提到了一些关于.htaccess的内容,什么不是,我实际上不太确定这意味着什么。按照说明操作,我转到etc/apache2/httpd.conf并将ALLOWOVERIDE ALL从无。

更改

这似乎没有解决任何问题,但我仍然收到相同的错误消息。

简而言之,我希望能够在iPhone上使用我的Safari浏览器访问www.prism.gatech.edu/~gtg880f并将其保存到我的主屏幕。然后,关闭3G和wifi,仍然使用网络应用程序。

编辑:尝试了roryf的第一个答案: 仍然无法正常工作。我想编辑httpd.conf中的/etc/apache2/httpd.conf文件吗?我正在使用Mac OSX。我在本节下添加了

<IfModule mime_module>
    #
    # TypesConfig points to the file containing the list of mappings from
    # filename extension to MIME-type.
    #
    TypesConfig /private/etc/apache2/mime.types

    #
    # AddType allows you to add to or override the MIME configuration
    # file specified in TypesConfig for specific file types.
    #
    #AddType application/x-gzip .tgz
    #
    # AddEncoding allows you to have certain browsers uncompress
    # information on the fly. Note: Not all browsers support this.
    #
    #AddEncoding x-compress .Z
    #AddEncoding x-gzip .gz .tgz
    #
    # If the AddEncoding directives above are commented-out, then you
    # probably should define those extensions to indicate media types:
    #
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/cache-manifest manifest # added to allow HTML5 offline caching

7 个答案:

答案 0 :(得分:1)

我刚刚检查过,看起来您的清单文件仍然以text / plain的形式提供。以下是您可以采取的修复步骤。

  1. 在清单文件所在的目录中创建一个名为.htaccess的新文件(有时,创建名称以点开头的文件的唯一方法是在命令行中执行此操作)

  2. 编辑文件并在其中插入以下行:

    AddType text/cache-manifest manifest
    
  3. 转到http://web-sniffer.net/并插入清单文件的路径,以确认它是使用正确的mime类型提供的。您需要在此处使用的路径是http://www.prism.gatech.edu/~gtg880f/offline2.manifest

答案 1 :(得分:1)

尝试将文件扩展名更改为其他内容。

我遇到了同样的问题,当我将其保存为cache.manifesto时 - 将.htaccess更改为

AddType text/cache-manifest .manifesto

并将其作为

指向html文件
<html manifest="cache.manifesto" > 

它很好。

答案 2 :(得分:1)

这是我在mac

中使用我的离线存储所做的工作

打开httpd.conf
备份。
找到“AllowOverride”并将值从“无”更改为“全部”

靠近第198行的地方

Options Indexes FollowSymLinks
AllowOverride None

答案 3 :(得分:0)

看起来你需要在Apache配置中将.manifest文件的MIME类型设置为text/cache-manifest,这可能就是你读到的.htaccess(一种方法)。

将此添加到.htaccess文件应该有效:

AddType text/cache-manifest manifest

答案 4 :(得分:0)

我的工作网络应用程序剪辑复制了.manifest文件的CACHE:部分中的文件名。像这样:

CACHE MANIFEST
index.html
index.js
style.css
debug.js
CACHE:
index.html
index.js
style.css
debug.js
NETWORK:

我还将它包含在与清单相同的Web服务器目录中的.htaccess文件中:

AddType text/cache-manifest .manifest manifest

答案 5 :(得分:0)

我也在iPhone上调试离线网络应用程序时遇到了同样的问题。该应用在Chrome和Safari中都表现正常(适用于Windows)。 iPhone上的重启最终成功了。希望这会有所帮助。

答案 6 :(得分:0)

或者,您可以简单地创建一个名为:manifest.php的文件并将其放入其中;

<?php
  header('Content-Type: text/cache-manifest');
  echo "CACHE MANIFEST\n\n";
  echo "CACHE:\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 "\n# Hash: " . md5($hashes) . "\n";
?>