2012-02-29 92 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 []; 
}