风の社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4995|回复: 0
打印 上一主题 下一主题

[JavaScript] 自动生成HTML5离线应用的Manifest

[复制链接]

449

主题

0

听众

1995

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    开心
    2012-9-12 10:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    楼主
    发表于 2012-11-22 09:10:46 |只看该作者 |倒序浏览
    HTML5的离线应用(Offline Application)已经广为人知了。无论是用来给WebApp提供离线使用的功能,还是仅仅用来加速页面加载,离线应用都是个让人很爽的特性。

    离线应用的原理什么的就不在赘述了,google一下就有很多介绍。这里主要谈下怎么生成离线应用的配置文件。离线应用需要根据服务器上的manifest配置来决定时候要离线和更新,以及判断有哪些文件需要离线。

    在小型WebApp中,可以人工一个个的添加文件路径,理论上是没啥大问题。当项目大了之后,会引用很多资源、图片等,特别是图片,必须人工从css文件中找出所有url添加到manifest中。个人觉得这是件相当无聊和浪费生命的事。我自己一直在坚持着:凡是程序能自动完成的工作,绝对不人工完成。

    因此,写了这个自动生成manifest的脚本 ioffline。

    本项目托管在 Githup 上(https://github.com/iazrael/ioffline),感兴趣的同学可以用用。其原理很简单,根据传入的html文件,分析里面的js和css引用,并把css里面的所有图片url都提取出来,写入到manifest中。这样只要发布的时候执行一下这个脚本,就可以完成manifest的编写,还能自动生成个时间戳,让客户端去更新离线缓存。是不是很爽咧?^_^

    使用方法

    1. 安装
    npm install ioffline

    2. 配置

    创建个配置文件 manifest.config.json,配置项如下:
    {
        //css 文件中, 如果图片url是写了绝对路径, 也就是说 html 跟 css 或 图片不在一个域名下
        //就要设置下面这个属性
        "linkPrefix": "<a onclick=\"javascript:pageTracker._trackPageview('/outgoing/cdn.xxx.com/');\" href=\"http://cdn.xxx.com/\">http://cdn.xxx.com/</a>",//optional
        "manifestSuffix": "manifest", // optional
        "outputRoot": "./output/", //optional 默认在当前目录输出 "./", 建议填入
        "cache": { //required 必须
            "offline": [//offline 是 输出的manifest的名字,跟 manifestSuffix 组合成文件名
                "index.html"
            ],
            "offline2": [
                "index.html",
                "main.html"
            ]
        },
        "network": ["*"],//optional
        "fallback": [ // optional
            "/ fallback.html"
        ]
    }
    配置信息中有很多都是可选的,所以可以只用最简配置:
    {
        "cache": { 
            "offline": [
                "index.html"
            ],
            "offline2": [
                "index.html",
                "main.html"
            ]
        }
    }
    PS:输出目录“outputRoot”最好填一下,否者会在当前目录输出,可能会替换掉原文件。

    3. 使用
    require('ioffline').generate('./manifest.config.json');
    //或者
    require('ioffline').generate({ /*一些配置*/ });

    好了,把麻烦事抛给电脑,现在可以尽情的去玩咯。哇哈哈哈~~

    >> 点击查看原文
    分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    转播转播0 分享分享0 收藏收藏0 支持支持0 反对反对0
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    Archiver|手机版|迦南的天空 ( 沪ICP备12037486号-1

    GMT+8, 2024-5-19 00:31 , Processed in 0.015237 second(s), 10 queries , Gzip On, Redis On.

    Powered by Discuz! X2.5

    © 2001-2012 Comsenz Inc.

    回顶部