【问题标题】:HTML5 AppCache with dynamic pages带有动态页面的 HTML5 AppCache
【发布时间】:2012-08-29 14:34:44
【问题描述】:
我有一个名为 pages.php 的 php 文件,它返回由查询参数指定的页面。用户从下拉列表中选择一个数字,然后将 ajax 请求发送到 pages.php,该数字如下:
pages.php?page=1
页数是动态的。
我正在使用 HTML5 的 AppCache 来缓存索引页面,但是如何让浏览器缓存 ajax 请求。将 pages.php 添加到清单文件中只会缓存没有页面的响应。但它会缓存任何带有页码的请求。我想在清单文件中做这样的事情:
CACHE:
pages.php?page=*
我正在尝试获取它,以便用户在离线时可以访问他们之前查看过的页面。 AppCache 似乎不适合让网站离线(只会让静态资源加载更快),我应该使用其他一些功能吗?
【问题讨论】:
标签:
html
offline-caching
application-cache
【解决方案1】:
我花了很长时间才弄清楚如何缓存由这样的 URI 方案访问的动态页面:
domain.com/admin/page/1
domain.com/admin/page/2
domain.com/admin/page/3
现在的问题是 appcache 不会缓存每个单独的管理员/页面/...,除非您访问它。
我所做的是使用离线页面来表示您可能希望允许用户离线访问的这些页面。
离线页面中的 JS 查找 URI 并抓取它以找出它应该显示的页面并从 localStorage 中获取数据链接到每个单独的页面。
我对其他解决方案持开放态度,但这是我能想到的让一堆单独的页面脱机而只访问一个管理页面的全部方法。
【解决方案2】:
我通过使用本地存储解决了这个问题(我使用了 jquery localstorage 插件来帮助解决这个问题)。
过程是
- 当您通常从锚点或重定向中引用时,从页面内部调用,而不是调用函数为您重定向。该函数将url中的参数存储到localstorage,然后只重定向到不带参数的url。
- 在接收目标页面上。从本地存储中获取参数。
重定向代码
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 [];
}