我有想要离线使用的动态页面。我想使用 HTML5 的应用程序缓存来做到这一点。问题是我不知道页面的所有资源(JavaScript 和 CSS),因为这些部分是动态的。
我有一个如下所示的 manifest.appcache 文件:
CACHE MANIFEST
#1330475607
CACHE:
/
但这似乎只缓存页面的 HTML,而不是页面的其余资源。有没有办法做这样的事情?
如果没有,是否可以使用 JavaScript 以编程方式设置缓存(我想我可以循环通过链接和脚本标签)?
我有想要离线使用的动态页面。我想使用 HTML5 的应用程序缓存来做到这一点。问题是我不知道页面的所有资源(JavaScript 和 CSS),因为这些部分是动态的。
我有一个如下所示的 manifest.appcache 文件:
CACHE MANIFEST
#1330475607
CACHE:
/
但这似乎只缓存页面的 HTML,而不是页面的其余资源。有没有办法做这样的事情?
如果没有,是否可以使用 JavaScript 以编程方式设置缓存(我想我可以循环通过链接和脚本标签)?
在缓存清单文件缓存部分,必须单独提及每个资源文件。
因此,您应该与页面一起动态生成缓存清单文件。这样,每次页面更改时,其清单文件也会更新。
清单文件中的资源与页面一起下载。大多数时候页面的 javascript 在这些下载完成后执行。因此,我们无法使用 javascript 设置缓存清单。
据我所知,您不能在缓存部分下使用通配符(尽管它在故障回复部分下工作)您也不能在 javascript 中循环,因为清单是在 javascript 文件之前加载的。
是否可以使用将所有 js/css 打包在一个文件中的服务器端脚本?
如果你去老学校(不安静)并使用 url 参数,你可以这样做。
我通过使用本地存储解决了这个问题(我使用了 jquery 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 [];
}