解开CFBlog的index.js的面纱
CFBlog的index.js是混淆过的,不易理解,tg群里也问过作者,说不打算开源,这让一些爱折腾的人不好折腾了。
经过本人多日的研究,梳理逻辑,将其进行人工格式化(不包含OPT配置),并附件上注释,以供大家学习。
这里除了添加换行、缩进和注释外,并未做其他改动。比如
"https://raw.githubusercontent.com/gdtool/cloudflare-workers-blog/master/themes/default/"==OPT.themeURL&&(OPT.themeURL="https://raw.githubusercontent.com/gdtool/cloudflare-workers-blog/master/themes/default2.0/")
其实正常代码应该是
//如果采用默认default主题,则改为加载default2.0主题
if("https://raw.githubusercontent.com/gdtool/cloudflare-workers-blog/master/themes/default/"==OPT.themeURL){
OPT.themeURL="https://raw.githubusercontent.com/gdtool/cloudflare-workers-blog/master/themes/default2.0/"
}
但为了保持与源码的一致性,依旧保留了第一种的方式。
后续会根据自己的理解,自行写一套阅读性强的源码并开源,敬请期待。
大纲结构
1~26行是一个主函数,27~末尾是这个函数的参数,这个参数是一个数组类型,包含3个函数,通过这个主函数加载这3个函数。
数组中的第一个函数(第28行)不用搭理。
数组中的第二个函数(第31~584行)是真实的处理逻辑,下面会展开介绍。
数组中的第二个函数(第586行~末)是引入mustanche.js ,也不用搭理。
解析第二个函数
从图中可以看出是一个集合列表
前面(第35~138行)是定义了一堆函数(已混淆),大部分的函数已经加上注释了。
//博客前端主页
//async function a(t,e,r){
//getKVArticleCategory
//function i(t,e,r=OPT.pageSize){
//返回上篇、本篇、下篇文章
//function s(t){
//翻页
//function o(t,e=OPT.pageSize){
//KV读取,t:key值,e:格式是否为json,默认true
//function l(t,e=!1){
//写入kv
//function c(t,e){
//获取主题指定页的模板源码
//function g(t){
//获取标签、分类列表?
//function f(t){
//判断是否为对象,若为字符串,则尝试转json后再判断
//function h(t){
//排序
//function p(t,e,r=!0){
第162行是关键代码。用过cf workers的都知道,监听请求都是用addEventListener
这个函数。
addEventListener中的函数说明
这里只列举一下所在行,不进行展开说明,感兴趣的可以根据下面的方式进行自行阅读理解。
- 进行Base Auth(第184行)
- 导出文章(第206行)
- 处理主题预览及分页(第235行)
- 访问robots.txt(第243行)
- 访问favicon.ico(第252行)
- 访问sitemap.xml(第271行)
- 访问博客前台-分页(第298行)
- 访问博客前台-分类页(第348行)
- 访问博客前台-标签页(第352行)
- 访问博客前台-文章详情页(第356行)
- 访问博客管理后台-新建页(第413行)
- 请求博客管理后台接口-发布(第429行)
- 访问博客管理后台接口-文章列表页(第459行)
- 请求博客管理后台接口-修改文章(第466行)
- 请求博客管理后台接口-保存配置(第481行)
- 请求博客管理后台接口-导入(第492行)
- 请求博客管理后台接口-保存新建的文章(第504行)
- 设置浏览器缓存时间(第575行)
阅读方式参考
左侧源码,右侧函数列表,看到函数调用就看看右侧的函数说明。