2012-02-29 131 views
0

我有我想離線使用的動態頁面。我想使用HTML5的應用程序緩存來執行此操作。問題是我不知道頁面的所有資源(JavaScript和CSS),因爲這些部分是動態的。如何使用HTML5的應用程序緩存(appcache)來緩存動態頁面?

我有一個manifest.appcache文件看起來像這樣:

CACHE MANIFEST 
#1330475607 
CACHE: 
/

但這似乎只緩存頁面的HTML而不是頁面的其餘資源。有沒有辦法做這樣的事情?

如果沒有,是否有可能通過JavaScript以編程方式設置緩存(我想我可以通過鏈接和腳本標記循環)?

+0

如果你是好使用PHP,可以這樣做。 – Markasoftware 2013-04-19 03:49:36

回答

0

據我所知,不能在緩存部分下使用通配符(雖然它在故障恢復部分下工作) 您也無法在javascript中循環,因爲清單在javascript文件之前加載。

是否有可能使用服務器端腳本將所有js/css打包到一個文件中?

2

在緩存清單文件緩存部分中,每個資源文件都必須單獨提及。

因此,您應該隨頁面一起動態生成緩存清單文件。每次頁面更改其清單文件時都會這樣更新。

清單文件中的資源隨頁面一起下載。大部分時間頁面的JavaScript在這些下載完成後執行。所以我們無法用javascript設置緩存清單。

0

如果你去舊學校(不寧靜),並使用URL參數,你可以這樣做。

我解決了這個通過使用本地存儲(我用jquery localstorage插件來幫助這個)。

過程是

  1. 從內部頁面時,你通常會從錨HREF或重定向,而不是調用一個函數來重定向你。該函數將參數從url存儲到localstorage,然後僅重定向到不帶參數的url。
  2. 在接收目標頁面上。從localstorage獲取參數。

重定向代​​碼

function redirectTo(url) { 
    if (url.indexOf('?') === -1) { 
     document.location = url; 
    } else { 
     var params = url.split('?')[1]; 
     $.localStorage.set("pageparams", params); 
     document.location = url.split('?')[0]; 
    }; 
} 

目標頁面代碼

var myParams = GetPageParamsAsJson(); 
var page = myParams.page; 

function GetPageParamsAsJson() { 
    return convertUrlParamsToJson($.localStorage.get('pageparams')); 
} 

function convertUrlParamsToJson(params) { 
    if (params) { 
     var json = '{"' + decodeURI(params).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}'; 
     return JSON.parse(json); 
    } 
    return []; 
}