2010-09-16 21 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的!