参考文档:http://www.w3cschool.cc/html/html5-app-cache.html

HTML5 应用程序缓存 又称离线缓存 ,即使断线了,刷新后也还是缓存了原来的页面,不会404了

首先,请在文档的<html> 标签中包含 manifest 属性:

<!DOCTYPE HTML>
<html manifest="page.appcache"> <!--这里的page.appcache是一个文件,自己手动生成-->
...
</html>

在Apache,或者在.htaccess文件上加上

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond $1 !^(index\.php|robots\.txt|views|plugins|backup|upload|image|runtime|install)
RewriteRule ^(.*)$ index.php/$1 [L]
#加上这一句
AddType text/cache-manifest manifest
</IfModule>

下面就是生成.appcache文件了。格式是

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js NETWORK:
login.php FALLBACK:
/html/ /offline.html

但是一个项目中不会只有这么点文件,要把更多的资源文件。css.js.img等加载进来,所以还需要一个遍历目录的方法。以下是我自己改写的一个方法。

<?php

/**
* 获取路径下所有文件
* @param string $folder 路径
* @param int $levels 处理路径层级
* @return array
* @author lixianghui
*/
function list_files($folder = '', $levels = 100) {
if (empty($folder) || !$levels) {
return false;
}
$files = array();
//打开目录
if ($dir = @opendir($folder)) {
//读取目录句柄
while (($file = readdir($dir) ) !== false) {
//过滤非法字符
if (in_array($file, array('.', '..')))
continue;
//过滤中文
if (preg_match("/[\x7f-\xff]/", $file))
continue;
//判断是否目录
if (is_dir($folder . '/' . $file)) {
//递归上一层级
$files2 = list_files($folder . '/' . $file, $levels - 1);
//生成目录或合并结果集
if ($files2)
$files = array_merge($files, $files2);
else
$files[] = $folder . '/' . $file . '/';
} else {
//文件
//过滤非资源文件
if (in_array(pathinfo($file)['extension'], array('css', 'js', 'png', 'jpg', 'gif'))) {
$files[] = $folder . '/' . $file;
}
}
}
}
@closedir($dir);
return $files;
} /**
* 离线缓存
* @return void
* @author lixianghui
*/
function offline_cache(){
$list = array();
$file_str = "";
   //获取目录下的资源文件
$dir_upload = list_files('upload');
$dir_default = list_files('views/default');
$file_array=array_merge($dir_upload,$dir_default); foreach ($file_array as $val) {
$file_str.=$val . "\n";
}
  //生成appcache文件
$cache_str = "CACHE MANIFEST\n";
$cache_str.="#" . date("Y-m-d H:i:s") . "\n";
$cache_str.=$file_str;
$cache_str.="NETWORK:\n\n\n";
$cache_str.="FALLBACK:\nnomore.html"; file_put_contents("page.appcache", $cache_str);
}

好了,接下来打开console测试,访问页面会看到缓存的资源都加载成功。如果出现保存请检查资源是否保存,或者是否存在

HTML5离线缓存的更多相关文章

  1. HTML5离线缓存(Application Cache)

    HTML5离线缓存又名Application Cache,是从浏览器的缓存中分出来的一块缓存区,要想在这个缓存中保存数据,可以使用一个描述文件(manifest file),列出要下载和缓存的资源. ...

  2. HTML5 离线缓存管理库

    一.HTML5离线缓存技术 支持离线缓存是HTML5中的一个重点,离线缓存就是让用户即使在断网的情况下依然可以正常的运行应用.传统的本地存储数据的方式有 localstorage,sessionsto ...

  3. HTML5离线缓存问题

    HTML5离线缓存问题 1.应用程序缓存 什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. ...

  4. HTML5 离线缓存Appcache

    创建一个和html同名的manifest文件,比如页面为index.html,那么可以建一个index.manifest的文件,然后给index.html的html标签添加如下属性即可: <ht ...

  5. html5离线缓存使用

    html5 离线缓存使用以及注意事项 1.index.html中加入离线缓存的声明文件 如:<!DOCTYPE html><html manifest="test.appc ...

  6. node.js与HTML5离线缓存

    最近正学到HTML5的离线缓存,却看到需要配置服务器.一下子就懵了,毕竟服务器的有关配置一般是很复杂的,而node.js的服务器是自己的代码生成的,这下要怎么配置?在网上搜索了很久,都没用关于node ...

  7. HTML5离线缓存攻击测试

    本实验采用局域网模拟,通过修改本地HOSTS文件来模拟域名以及DNS欺骗.合法网站使用Linux CentOS7的apache服务器搭建,IP为192.168.1.113,HOSTS文件中加入192. ...

  8. Html5离线缓存详细讲解

    离线缓存是Html5新特性之一,简单理解就是第一次加载后将数据缓存,在没有清除缓存前提下,下一次没有网络也可以加载,用在静态数据的网页或游戏比较好用.当然,Html5新的特性都不是所有浏览器都能支持的 ...

  9. 使用 jQuery Mobile 与 HTML5 开发 Web App —— HTML5 离线缓存

    本文要介绍的,是 HTML5 离线网络应用程序的特性,离线网络应用程序在 W3C 中的实际名称是 "Offline Web applications" ,也称离线缓存.当用户打开浏 ...

随机推荐

  1. Hibernate 基础配置及常用功能(一)

    本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...

  2. php + jQuery自动完成插件autocompleter

    autocompleter是一个简单的,容易的,可定制的自动完成功能插件,支持缓存. 1.引用脚本 <script type="text/javascript" src=&q ...

  3. 20145227&20145201 《信息安全系统设计基础》实验五

    北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:(按贡献大小排名)鄢曼君 李子璇 学号:(按贡献大小排名)20145227 20145201 成绩: ...

  4. python:轮播图

    下载jquery.bxslider 参考地址:www.bxslider.com 引入jquery.bxslider.css和jquery.bxslider.js <!DOCTYPE HTML P ...

  5. html table表头斜线

    关于htnl的table的表头斜线,符合表格设计规范,<style> .biaotou { line-height: 5px; text-align: left; } .biaotou { ...

  6. 【转】Hibernate 常见异常

    转载地址:http://smartan.iteye.com/blog/1542137 Hibernate 常见异常net.sf.hibernate.MappingException        当出 ...

  7. YTU 3027: 哈夫曼编码

    原文链接:https://www.dreamwings.cn/ytu3027/2899.html 3027: 哈夫曼编码 时间限制: 1 Sec  内存限制: 128 MB 提交: 2  解决: 2 ...

  8. easyui dialog iframe

    function toGrant(obj,url,showMsg) {                                        var dialog=$('#dlg_grant' ...

  9. ubuntu java开发环境搭建(jdk+tomcat+eclipse)

    一.jdk的安装配置. 1.下载jdk. 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...

  10. mac攻略(六) -- mac根目录分析

    根目录截图如下     符合unix传统的目录 /bin 传统unix命令的存放目录,如ls,rm,mv等. /sbin 传统unix管理类命令存放目录,如fdisk,ifconfig等等. /usr ...