3

如何创建启用离线的 Web 应用程序,以便当用户访问 hxxp://mywebsite/ 并且离线时显示 hxxp://mywebsite/offline/。[我的网站中有大约 100 个不同的动态页面,所以我无法将它们全部硬编码到缓存清单文件中]

4

4 回答 4

7

我引用“manifest.php”而不是“cache.manifest”,那么我的 php 文件如下所示:

<?php
    header('Content-Type: text/cache-manifest');
    echo "CACHE MANIFEST\n";

    $hashes = "";

    $dir = new RecursiveDirectoryIterator(".");
    foreach(new RecursiveIteratorIterator($dir) as $file) {
        $info = pathinfo($file);
        if ($file->IsFile() &&
            $file != "./manifest.php" &&
            substr($file->getFilename(), 0, 1) != ".")
        {
            echo $file . "\n";
            $hashes .= md5_file($file);
        }
    }

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

?>

文件哈希使其保持最新,因此如果有任何文件更改,清单也会随之更改。希望有帮助:)

于 2010-09-16T20:23:32.853 回答
5
CACHE MANIFEST
CACHE:
/Offline/OfflineIndex.html

FALLBACK:
/ /Offline/OfflineIndex.html

NETWORK:
*

这将导致您在整个站点上的所有页面在离线时重定向到离线状态。唯一的问题是声明清单的页面,因为该页面始终被缓存。这意味着您不能在每个页面上声明清单,因为每个访问过的页面都将被自己缓存而不是重定向。因此,您可以做的是在另一个 html 文件(IE. Synchronize.html)上声明您的清单,然后从默认情况下通过存储 cookie 或 localcache 值检查您的应用程序是否可以离线使用。如果未重定向到声明清单的 synchronize.html,则设置 localcache 值,然后重定向回索引。

离线真棒SSSSSSSS!!!!

于 2010-11-25T14:54:22.860 回答
1

不可能在缓存清单中使用通配符,至少据我所知,它在任何当前浏览器中都不起作用。另一种方法可能是动态生成缓存清单,并让脚本生成所有这些后备条目。

于 2010-09-16T17:45:13.660 回答
0

在索引页面的不可见 iframe 中引用您的清单文件。这样,您的索引页面就不会像默认情况下那样被缓存,并且您可以完全控制您的后备...

不需要不可靠的 cookie 或 localStorage!

于 2012-06-26T09:26:03.460 回答