2010-09-16 47 views
3

如何创建脱机启用的Web应用程序,例如当用户访问hxxp:// mywebsite /时显示 ,并且显示hxxp:// mywebsite/offline /以外的状态。 [在我的网站中有大约100个不同的动态页面,所以我无法在缓存清单文件中将它们全部硬编码]在缓存清单文件的FALLBACK部分中使用通配符HTML5

回答

5
CACHE MANIFEST 
CACHE: 
/Offline/OfflineIndex.html 

FALLBACK: 
//Offline/OfflineIndex.html 

NETWORK: 
* 

这将导致整个网站的所有网页在离线时重定向到离线。唯一的问题是声明清单的页面始终被缓存。这意味着您无法在每个页面上声明清单,因为每个访问过的页面都将自行缓存并且不会重定向。所以你能做的就是声明你在另一个HTML文件清单(IE。Synchronize.html),然后从您的应用程序是否已提供用于离线通过存储cookie或localcache值默认勾选。如果没有重定向到声明的清单的synchronize.html,请设置localcache值,然后重定向回到索引。

OFFLINE AWESOMENESSSSSSSSSSS !!!!

+0

并不完全符合我的要求,但对于其他人阅读以获得对离线HTML5更深入的了解仍然是一个很好的答案。 – ashishb 2010-11-29 20:21:18

+0

清单的缓存是通过循环抛出的。这虽然帮助我们澄清了很多。谢谢 – drogon 2012-05-17 19:59:04

1

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

+0

是啊,看来可能我要动态地生成[成长] FALLBACK。感谢您确认我的恐惧。 – ashishb 2010-09-20 09:56:18

+0

@ashishb我刚刚发现,当前的Firefox 4.0每晚都会在后备部分支持通配符。尽管如此,仍然无法在Chrome或Opera dev版本中使用。 – robertc 2010-10-02 17:02:32

6

我引用“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"; 

?> 

文件哈希它跟上最新的,这样,如果任何文件的变化清单也会改变。希望有所帮助:)

+0

但我该如何生成FALLBACK条目? – ashishb 2010-09-20 09:55:44

+0

你只需要建立一些逻辑放到该脚本可以列出后备文件(基于路径,文件名等)分开。循环一次,排除FALLBACK文件。再次循环,只包含FALLBACK文件。 – ggutenberg 2010-09-20 11:06:58

0

参考在你的索引页一种无形的iframe您的清单文件。这样,你的索引页不被缓存,因为它通常是在默认情况下,你必须在你的回退总量控制...

无需不可靠的饼干或localStorage的!